按奇偶排序数组 II
给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
//偷懒一点 - 创建辅助空间
// if(A.size() == 0 || A.size() == 1) { return A; }
// vector<int> vec(A.size());
// int begin1 = 0;
// int begin2 = 1;
// for(int i = 0; i < A.size(); i++) {
// if(A[i] % 2 == 0) {
// //偶数
// vec[begin1] = A[i];
// begin1 += 2;
// }
// else {
// vec[begin2] = A[i];
// begin2 += 2;
// }
// }
// return vec;
//优化版本 - 双指针法
if(A.size() == 0 || A.size() == 1) { return A; }
int even_index = 0;
int odd_index = 1;
while(even_index < A.size() && odd_index < A.size()) {
//even_index 找奇数
while(even_index < A.size() && A[even_index] % 2 == 0) { even_index += 2; }
//odd_index 找偶数
while(odd_index < A.size() && A[odd_index] % 2 != 0) { odd_index += 2; }
if(even_index < A.size() && odd_index < A.size()) { swap(A[even_index], A[odd_index]); }
}
return A;
}
};