C++ 调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序。

使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。

数据范围
数组长度 [0,100]

数组内元素取值范围 [0,100]

样例
输入:[1,2,3,4,5]

输出: [1,3,5,2,4]
思路:先开两个数组,遍历把奇数偶数分开存,再遍历一遍写回去。

class Solution {
public:
    void reOrderArray(vector<int> &array) {
         vector<int> res1, res2;
         for (int i = 0; i < array.size(); i ++) {
             if(array[i] % 2 == 1) res1.push_back(array[i]);
             else res2.push_back(array[i]);
         }
         for(int i = 0; i < array.size(); i ++) {
             if(i < res1.size()) array[i] = res1[i];
             else array[i] = res2[i - res1.size()];
         }
    }
};

思路:两个指针指向首尾,向中间遍历,每次在左边遇到偶数右边遇到奇数就交换。

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        int i = 0, j = array.size() - 1;
        while (i < j) {
            while (i < j && array[i]%2) i ++;
            while (i < j && array[j]%2 == 0) j --;
            if(i < j) swap(array[i], array[j]);
        }
    }
};

你可能感兴趣的:(力扣,c++,算法)