题目

给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。

对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。

你可以返回任何满足上述条件的数组作为答案。

示例1:

1
2
3
输入:[4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

提示:

  1. 2 <= A.length <= 20000
  2. A.length % 2 == 0
  3. 0 <= A[i] <= 1000

思路分析:

对原数组进行排序操作,并借助另一个数组,首先解决偶数排序问题,便历排序后的数组,筛选出偶数值项,并把值赋值给另一个数组的偶数项,然后对奇数进行同样操作。

code

官方代码块:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
int n = A.size();
vector<int> ans(n);

int i = 0;
for (int x: A) {
if (x % 2 == 0) {
ans[i] = x;
i += 2;
}
}
i = 1;
for (int x: A) {
if (x % 2 == 1) {
ans[i] = x;
i += 2;
}
}
return ans;
}
};

me:本质一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
vector<int> B(A.size());
sort(A.begin(),A.end());
int flag=0;
for(int i=0;i<A.size();i++){
if(A[i]%2==0){
B[flag]=A[i];
flag+=2;
}
}
flag=1;
for(int i=0;i<A.size();i++){
if(A[i]%2==1){
B[flag]=A[i];
flag+=2;
}
}
return B;
}
};