题意:
    输入一个长度为 n 整数数组,数组里面可能含有相同的元素,实现一个函数来调整该数组中数字的顺序,
    使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,
    对奇数和奇数,偶数和偶数之间的相对位置不做要求。


方法一:
双指针

思路:
        利用双指针,左指针找偶数,右指针找奇数。
        最后交换左右指针的数。
        一直循环,直到左右指针相遇。
        
        

class Solution {
public:
    
    vector<int> reOrderArrayTwo(vector<int>& array) {
        int n=array.size();
        int i=0,j=n-1;
        while(i<j){//循环
            while(i<j&&array[i]%2==1){//找偶数
                i++;
            }
            while(i<j&&array[j]%2==0){//找奇数
                j--;
            }
            swap(array[i],array[j]);//交换
        }
        return array;
    }
};

时间复杂度:
空间复杂度:


方法二:
计数+双指针

思路:

        遍历一遍数组,对奇数个数计数。
        初始化左边奇数区间的范围,右边偶数区间的范围。
        再利用双指针实现。


class Solution {
public:
    
    vector<int> reOrderArrayTwo(vector<int>& array) {
        int n=array.size();
        int cnt=0;//奇数个数
        for(int i=0;i<n;i++){
            if(array[i]%2)
                cnt++;
        }
        int x=0,y=cnt;
        while(x<cnt&&y<n){//循环
            while(x<cnt&&(array[x]%2))//寻找偶数
                x++;
            while(y<n&&(array[y]%2==0))//寻找奇数
                y++;
            if(x<cnt&&y<n)
                swap(array[x],array[y]);//交换
            
        }
        return array;
    }
};

时间复杂度:
空间复杂度: