双指针进行操作

时间复杂度O(n),空间复杂度O(1)
  • 一个记录前偶数位置(pre),一个记录后奇数位置(last)
  • 当奇数位置大于偶数位置进行交换
  • ++pre,--last
tips:交换前需要在一次验证pre<last
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param array int整型vector
     * @return int整型vector
     */
    vector<int> reOrderArrayTwo(vector<int>& array) {
        // write code here
        if (array.size() == 0 || array.size() == 1) return array;
        int pre = 0; // 记录在前面的偶数位置
        int last = array.size() - 1; // 记录在后面的奇数位置
        while (pre < last) {
            while (array[pre] % 2 == 1) ++pre;
            while (array[last] % 2 == 0) --last;
            if (pre < last) {
                swap(array[pre], array[last]);
                ++pre;
                --last;
            }
        }
        return array;
    }
};