905. 按奇偶排序数组

给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。

返回满足此条件的 任一数组 作为答案。

示例 1:

1
2
3
输入:nums = [3,1,2,4]
输出:[2,4,3,1]
解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。

示例 2:

1
2
输入:nums = [0]
输出:[0]

提示:

  • 1 <= nums.length <= 5000
  • 0 <= nums[i] <= 5000

题解:

简单模拟题,双指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public int[] sortArrayByParity(int[] nums) {
int n = nums.length;
int l = 0, r = n - 1;
while (l < r) {
if (nums[l] % 2 == 1 && nums[r] % 2 == 0) {
this.swap(nums, l, r);
} else if (nums[l] % 2 == 0 && nums[r] % 2 == 0) {
l++;
} else if (nums[l] % 2 == 1 && nums[r] % 2 == 1) {
r--;
} else {
l++;
r--;
}

}
return nums;
}


public void swap(int[] nums, int i, int j) {
nums[i] = nums[i] ^ nums[j];
nums[j] = nums[i] ^ nums[j];
nums[i] = nums[i] ^ nums[j];
}
  • 时间复杂度:O(N),只需要遍历一次数组即可。
  • 空间复杂度:O(1),没有使用到额外空间。