LeetCode 922. 按奇偶排序数组 II
题目描述
思路分析
解法一:双指针就地交换(推荐)
核心思路:
- 使用两个指针
i和j,分别遍历偶数索引与奇数索引。- 当
nums[i]为奇数且nums[j]为偶数时交换。- 每次交换后继续推进对应指针,保证最终所有偶数索引放偶数。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示数组长度。
- 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
public int[] sortArrayByParityII(int[] nums) {
int n = nums.length;
int i = 0;
int j = 1;
// i 处理偶数索引,j 处理奇数索引
while (i < n && j < n) {
if ((nums[i] & 1) == 0) {
i += 2;
} else if ((nums[j] & 1) == 1) {
j += 2;
} else {
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
i += 2;
j += 2;
}
}
return nums;
}
}
func sortArrayByParityII(nums []int) []int {
n := len(nums)
i, j := 0, 1
// i 处理偶数索引,j 处理奇数索引
for i < n && j < n {
if nums[i]%2 == 0 {
i += 2
continue
}
if nums[j]%2 == 1 {
j += 2
continue
}
nums[i], nums[j] = nums[j], nums[i]
i += 2
j += 2
}
return nums
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 905. 按奇偶排序数组 | 简单 | 双指针 |
| 75. 颜色分类 | 中等 | 双指针 |
| 977. 有序数组的平方 | 简单 | 双指针 |
| 283. 移动零 | 简单 | 双指针 |
| 912. 排序数组 | 中等 | 排序 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
