给定一个非负整数数组 A,返回一个由 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.Time:O(n) Space:O(n)
// Time:O(n) Space:O(n)
public int[] sortArrayByParity(int[] A) {
int[] res = new int[A.length];
int t = 0;
for (int i = 0; i < A.length; ++i)
if (A[i] % 2 == 0)
res[t++] = A[i];
for (int i = 0; i < A.length; ++i)
if (A[i] % 2 == 1)
res[t++] = A[i];
return res;
}
2.Time:O(n) Space:O(1)
// Time:O(n) Space:O(1)
public int[] sortArrayByParity2(int[] A) {
int i = 0, j = A.length - 1;
while (i < j) {
if (A[i] % 2 > A[j] % 2) {
// i为奇数 j为偶数 交换
swap(A, i, j);
}
if (A[i] % 2 == 0) //i为偶数 往后判断
i++;
if (A[j] % 2 == 1) //j为奇数 往前判断
j--;
}
return A;
}
private void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}