给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
示例:
输入:[4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
提示:
2 <= A.length <= 20000
A.length % 2 == 0
0 <= A[i] <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-array-by-parity-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
基本思路:双指针,一个指针指向奇数,一个指针指向偶数;
vector<int> sortArrayByParityII(vector<int>& A) {
int i=0,j=1;
while(i<A.size()&&j<A.size()){
while(i<A.size()&&A[i]%2==0){
i=i+2;
}
while(j<A.size()&&A[j]%2==1){
j=j+2;
}
if(i<A.size()&&j<A.size()){
swap(A[i],A[j]);
i=i+2;
j=j+2;
}
}
return A;
}
vector<int> sortArrayByParityII(vector<int>& A) { //更加简洁版
int i=0,j=1;
for(;i<A.size();i=i+2){
if(A[i]&1){
while(A[j]&1){
j=j+2;
}
swap(A[i],A[j]); //不用担心越界,因为一半是奇数,一半是偶数,有一个不符合要求的A[i],必然有一个不符合要求恶的A[j]对应。
}
}
return A;
}