Given an array of integers nums
, half of the integers in nums
are odd, and the other half are even.
Sort the array so that whenever nums[i]
is odd, i
is odd, and whenever nums[i]
is even, i
is even.
Return any answer array that satisfies this condition.
Example 1:
Input: nums = [4,2,5,7] Output: [4,5,2,7] Explanation: [4,7,2,5], [2,5,4,7], [2,7,4,5] would also have been accepted.
Example 2:
Input: nums = [2,3] Output: [2,3]
Constraints:
2 <= nums.length <= 2 * 104
nums.length
is even.- Half of the integers in
nums
are even. 0 <= nums[i] <= 1000
Follow Up: Could you solve it in-place?
这题乍一看和前两题很相似,但其实也很相似,只是我以为的相似程度过高了,以为也可以一个从前一个从后开始换,没料到应该是奇数和偶数换。
于是就改写成了奇数和偶数换的效果,其实也是two pointers只是一个指向奇数一个指向偶数。还有个小坑就是在swap之前还需要判断一下i j是否 < length,
class Solution {
public int[] sortArrayByParityII(int[] nums) {
int i = 0;
int j = 1;
while (i < nums.length && j < nums.length) {
while (i < nums.length && nums[i] % 2 == 0) {
i += 2;
}
while (j < nums.length && nums[j] % 2 != 0) {
j += 2;
}
if (i < nums.length && j < nums.length) {
swap(nums, i, j);
}
}
return nums;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}