922. 按奇偶排序数组 II
给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
1.暴力法,遍历比较并在新开辟的数组中添加
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
vector<int> res(A.size());
if(A.size()==0)return res;
int t=1,m=0;
for(int i=0;i<A.size();i++)
{
if(A[i]%2!=0)
{
res[t] = A[i];
t+=2;
}
if(A[i]%2 ==0)
{
res[m] = A[i];
m+=2;
}
}
return res;
}
};
2.开辟两个数组保存不符合奇偶排序的数,下一次遍历时插入
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
vector<int> odd;
vector<int> even;
if(A.size()==0)return A;
for(int i=0;i<A.size();i++)
{
if(A[i]%2!=0)
{
if(i%2==0)
{
odd.push_back(A[i]);
}
}
if(A[i]%2 ==0)
{
if(i%2!=0)
{
even.push_back(A[i]);
}
}
}
int t=0,m=0;
for(int i=0;i<A.size();i++)
{
if(A[i]%2!=0)
{
if(i%2==0)
{
A[i]=even[t];
t++;
}
}
if(A[i]%2 ==0)
{
if(i%2!=0)
{
A[i] = odd[m];
m++;
}
}
}
return A;
}
};
3.奇偶双指针,不开辟新的空间
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
if(A.size()==0)return A;
int j=1;
for(int i=0;i<A.size();i+=2)
{
if(A[i]%2==1)
{
while(A[j]%2==1)
{
j+=2;
}
swap(A[i],A[j]);
}
}
return A;
}
};