给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。
你可以返回满足此条件的任何数组作为答案。
示例:
输入:[3,1,2,4]
输出:[2,4,3,1]
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。
提示:
1 <= A.length <= 5000
0 <= A[i] <= 5000
思路
创建两个指针,一个指向开头,一个指向结尾;如果发现开头的指针的元素是偶数,那么不需要交换,只需对下一个首指针进行判断;如果首指针指向的元素是奇数,那么需要对其和后面的尾指针进行交换,交换后因为不确定新的首指针是不是偶数,所以首指针不动,但是尾指针一定是奇数了,故仅尾指针左移。
代码
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& A) {
int len = A.size();
int left=0;
int right = len-1;
while(left<right){
if(A[left]%2==0)//这个数是偶数,不需要和右边的数进行交换了
left++;
else//这个数是奇数
{
int temp=A[left];
A[left]=A[right];
A[right]=temp;
right--;//换完之后并不能保证左边的那个数是偶数,所以还需对这个数进行判断;但是右边的数一定是奇数了,故right--
}
}
return A;
}
};