双指针进行操作
时间复杂度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;
}
};

京公网安备 11010502036488号