【Leetcode 每日一题 - 补卡】922. 按奇偶排序数组 II
问题背景
给定一个非负整数数组
n
u
m
s
nums
nums,
n
u
m
s
nums
nums 中一半整数是 奇数 ,一半整数是 偶数 。
对数组进行排序,以便当
n
u
m
s
[
i
]
nums[i]
nums[i] 为奇数时,
i
i
i 也是 奇数 ;当
n
u
m
s
[
i
]
nums[i]
nums[i] 为偶数时,
i
i
i 也是 偶数 。
你可以返回 任何满足上述条件的数组作为答案 。
数据约束
- 2 ≤ n u m s . l e n g t h ≤ 2 × 1 0 4 2 \le nums.length \le 2 \times 10 ^ 4 2≤nums.length≤2×104
- n u m s . l e n g t h nums.length nums.length 是偶数
- n u m s nums nums 中一半是偶数
- 0 ≤ n u m s [ i ] ≤ 1000 0 \le nums[i] \le 1000 0≤nums[i]≤1000
解题过程
要求数组中的奇数放在奇数位置上,偶数放在偶数位置上。
只要定义两个指针,遇到符合要求的元素直接后移,当两个元素都不符合要求时(题目保证这种情况一定会发生),交换它们所指的元素。
具体实现
class Solution {
public int[] sortArrayByParityII(int[] nums) {
int left = 0, right = nums.length;
for (int i = 0, j = 1; i < nums.length;) {
if ((nums[i] & 1) == 0) {
i += 2;
} else if ((nums[j] & 1) == 1) {
j += 2;
} else {
swap(nums, i, j);
i += 2;
j += 2;
}
}
return nums;
}
private void swap (int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}