思路1
用交换的思想,如果当前的不符合,就和后一位交换,如果交换之后还不符合,就和后面三位交换。保证对于当前的这一位元素操作结束后,它已经在合适的位置上。
vector<int> sortArrayByParityII(vector<int>& A) {
int size=A.size(),temp=A[0],n=1;
for(int i=0;i<size-1;i++){
n=1;
while((i%2==0&&A[i]%2==1)||(i%2==1&&A[i]%2==0)){
temp=A[i];
A[i]=A[i+n];
A[i+n]=temp;//如果不合要求,就和后一位交换
n+=2;
}
}
return A;
}
效果不太好,时间复杂度是n的平方
思路2
再弄两个vector数组,一个存奇数一个存偶数,遍历完a了再赋值过去
vector<int> sortArrayByParityII(vector<int>& A) {
int size=A.size();
vector<int> B,C;
for(int i=0;i<size;i++){
if(A[i]%2==0){B.push_back(A[i]);}
else C.push_back(A[i]);
}
int k=0;
for(int j=0;j<size-1;j+=2){
A[j]=B[k];
A[j+1]=C[k];
k++;
}
return A;
}
复杂度是On