题目描述
给定一个非负整数数组 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
解题思路
1.双指针遍历:前指针一直往前走直到遇到奇数,后指针一直前走直到遇到偶数,都遇到则交换,直到pre>=after
java代码如下
class Solution {
public int[] sortArrayByParity(int[] A) {
int pre = 0;
int after = A.length - 1;
int temp;
while (pre < after) {
while ((pre < after) && (A[pre] % 2 == 0)) {//pre < after限制一定要加
pre++;
}
while ((pre < after) && (A[after] % 2 == 1)) {
after--;
}
此处不加if(pre < after) 判断也可,
if (pre < after) {
temp = A[pre];
A[pre] = A[after];
A[after] = temp;
pre++;
after--;
}
}
return A;
}
}
执行结果如下
2.
借鉴代码
class Solution {
public int[] sortArrayByParity(int[] A) {
int[] B = new int[A.length];
int h=0;
int j=B.length-1;
for(int i=0;i<A.length;i++){
if(A[i]%2==0){
B[h++]=A[i];
}else{
B[j--]=A[i];
}
}
return B;
}
}
运行结果如下