给定一个非负整数数组 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 <= 50000 <= A[i] <= 5000
思路与实现:
题目给的要求是将奇偶分开,每次寻找左边第一个奇数和右边第一个偶数,相互交换,直到两个index指针相遇即 i >= j,说明已经将奇偶分开。
class Solution {
public int[] sortArrayByParity(int[] A) {
if(A == null || A.length == 0 || A.length == 1) return A;
int i = 0;
int j = A.length - 1;
while(i < j) {
while(i < j && A[i] % 2 == 0) ++i;
while(i < j && A[j] % 2 == 1) --j;
swap(A,i,j);
}
return A;
}
public void swap(int[] A, int i, int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
本文介绍了一种有效的算法,用于将数组中的所有偶数元素放置在所有奇数元素之前。通过使用双指针技巧,该算法在原地完成排序,避免了额外的空间开销。示例展示了如何对数组[3,1,2,4]进行处理,得到可能的输出如[2,4,3,1]。代码实现简洁高效,适用于各种规模的数组。
652

被折叠的 条评论
为什么被折叠?



