1. 题目来源
2. 题目说明
3. 题目解析
本题与排序没半毛钱关系,题目保证奇偶数各占一半,那就直接奇数放到奇数下标,偶数放到偶数下标即可。
方法一:双指针+一次遍历
双指针指向当前的要放置奇偶数的空位,一次遍历遇见奇数放到奇数指针指向下标,偶数就放到偶数指针指向下标。每次放完指针往后跳两格。一次遍历结束,就放置完毕了。
其实能够发现,当奇偶任意一方全部放置完毕后,另一方则无需判断,直接在空位置任意放即可。这个可以减少判断条件,优化常数。
代码:
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
vector<int> res(A.size());
for (int i = 0, j = 0, k = 0; i < A.size(); ++i)
if (A[i] % 2) res[j + 1] = A[i], j += 2;
else res[k] = A[i], k += 2;
return res;
}
};