题目描述:
给定一个非负整数数组 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
思路:
新建一个整型数组B,遍历A数组,遇到偶数就将该数放到B[0]处,下标加二;遇到奇数就将该数放到B[1]处,下标加二。遍历结束,返回数组B。要注意定义数组B的大小:A.size()。
代码:(C++)
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
int i;
int m=0;
int n=1;
vector <int> B(A.size());
for(i=0;i<A.size();i++)
{
if(A[i]%2==0)
{
B[m]=A[i];
m+=2;
}
else
{
B[n]=A[i];
n+=2;
}
}
return B;
}
};
提交结果:
补充方法
思路:
遍历A数组,将奇数下标的偶数与偶数下标的奇数互换即可。
注意:位运算&1会比取余%2快。
代码:(C++)
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
int i=0;
int j=1;
//将奇数下标的偶数与偶数下标的奇数互换
for(i=0;i<A.size();i+=2) //i为偶数下标
{
if(A[i]&1==1) //奇数
{
while(A[j]&1==1)
j+=2;
swap(A[i],A[j]);
}
}
return A;
}
};
提交结果: