题目描述
给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。
你可以返回满足此条件的任何数组作为答案。
示例:
输入:[3,1,2,4]
输出:[2,4,3,1]
输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。
思路
第一种方法:扫描数组两遍
第二种方法:基于快排的思想
第三种方法:自定义cmp排序
具体代码
方法一
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& a) {
vector<int> res;
for (int i = 0; i < a.size(); i ++ )
if (a[i] % 2 == 0) res.push_back(a[i]);
for (int i = 0; i < a.size(); i ++ )
if (a[i] % 2 == 1) res.push_back(a[i]);
return res;
}
};
方法二
class Solution {
public:
vector<int> sortArrayByParity(vector<int>& a) {
int i = 0, j = a.size() - 1;
while (i < j) {
if (a[i] % 2 == 0 && a[j] % 2 == 1) i ++ , j --;
else if (a[i] % 2 == 1 && a[j] % 2 == 0) {
swap (a[i], a[j]);
i ++ , j --;
}
else if (a[i] % 2 == 0 && a[j] % 2 == 0) i ++;
else j --;
}
return a;
}
};
方法三
class Solution {
public:
static bool cmp (int a, int b) {
return a % 2 < b % 2;
}
vector<int> sortArrayByParity(vector<int>& a) {
sort (a.begin(), a.end(), cmp);
return a;
}
};