题目描述
所有奇数位于前半部分,偶数位于后半部分
同leetcode
leetcode
- 按奇偶排序数组
给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。
你可以返回满足此条件的任何数组作为答案。
void sortCore(vector<int>&A, int start, int end)
{
if(start >= end) return;
if(A[start] %2 == 1 && A[end] %2 == 0)
{
int tmp = A[start];
A[start] = A[end];
A[end] = tmp;
sortCore(A, ++start, --end);
}
else if(A[start] %2 == 0 && A[end] %2 == 0)
{
sortCore(A, ++start, end);
}
else if(A[start] %2 == 1 && A[end] %2 == 1)
{
sortCore(A, start, --end);
}
else
{
sortCore(A, ++start, --end);
}
}
vector<int> sortArrayByParity(vector<int>& A) {
int a = 0, b = A.size()-1;
if(A.size()<=1)return A;
sortCore(A, 0, A.size()-1);
return A;
}
执行用时 : 72 ms, 在Sort Array By Parity的C++提交中击败了40.92% 的用户
内存消耗 : 9.8 MB, 在Sort Array By Parity的C++提交中击败了83.95% 的用户
- 按奇偶排序数组 II
给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
你可以返回任何满足上述条件的数组作为答案。
vector<int> sortArrayByParityII(vector<int>& A) {
if(A.size()<=0) return A;
int odd =1, even = 0;
bool oddflag = false, evenflag = false;
while(odd<A.size() && even<A.size())
{
if((A[odd] & 0x01) == 0) oddflag = true;
else oddflag = false;
if((A[even] & 0x01) == 1) evenflag = true;
else evenflag = false;
if(oddflag & evenflag)
{
int tmp = A[odd];
A[odd] = A[even];
A[even] = tmp;
odd += 2;
even += 2;
oddflag = false;
evenflag = false;
}
else if((!oddflag) & (!evenflag) )
{
odd += 2;
evenflag += 2;
}
else if(oddflag)
{
even += 2;
}
else
{
odd += 2;
}
}
return A;
}
执行用时 : 196 ms, 在Sort Array By Parity II的C++提交中击败了34.62% 的用户
内存消耗 : 11.9 MB, 在Sort Array By Parity II的C++提交中击败了76.18% 的用户
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
vector<int> a(A.size());
int x1=0,x2=1,i;
for(i=0;i<A.size();i++)
{
if(A[i]%2==0){a[x1]=A[i];x1=x1+2;}
else {a[x2]=A[i];x2=x2+2;}
}
return a;
}
};