给定一个长度不小于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; } } } } };