现在的位置: 首页 > 综合 > 正文

偶数位上都是偶数,要么所有的奇数位上都是奇数

2018年05月02日 ⁄ 综合 ⁄ 共 581字 ⁄ 字号 评论关闭
 给定一个长度不小于2的数组arr。 写一个函数调整arr,使arr中要么所有的偶数位上都是偶数,要么所有的奇数位上都是奇数上。 要求:如果数组长度为N,时间复杂度请达到O(N),额外空间复杂度请达到O(1),下标0,2,4,6...算作偶数位,下标1,3,5,7...算作奇数位,例如[1,2,3,4]调整为[2,1,4,3]即可

你的答案 (正确)

class Solution {
public:
    /**
     *  奇数位上都是奇数或者偶数位上都是偶数
     *  输入:数组arr,长度大于2
     *  len:arr的长度
     *  将arr调整成奇数位上都是奇数或者偶数位上都是偶数
     */
    void oddInOddEvenInEven(vector& arr, int len) {
		int odd,even;
        odd=1;
        even=0;
        while (even < len && odd < len) {  
            if (arr[even] % 2 == 0) {  
                even = even + 2;  
            }  
            if (arr[odd] % 2 == 1) {  
                odd = odd + 2;  
            }  
            if (even < len && odd < len) {//该条件的目的是先判断数组下标是否出界,如果不加该条件判断,程序可能会有数组下标越界错误  
                if (arr[even] % 2 == 1 && arr[odd] % 2 == 0) {  
                    int temp = arr[even];  
                    arr[even] = arr[odd];  
                    arr[odd] = temp;  
                }  
            }  
        }  
        
    }
};

抱歉!评论已关闭.