LeetCode 905. 按奇偶排序数组
题目描述
思路分析
解法一:双指针交换(推荐)
核心思路:
- 左指针寻找奇数,右指针寻找偶数。
- 当左右指针都停下时交换元素。
- 直到两指针相遇结束。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示数组长度。
- 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
public int[] sortArrayByParity(int[] nums) {
int left = 0;
int right = nums.length - 1;
// 双指针向中间收缩并交换
while (left < right) {
while (left < right && nums[left] % 2 == 0) {
left++;
}
while (left < right && nums[right] % 2 == 1) {
right--;
}
if (left < right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
left++;
right--;
}
}
return nums;
}
}
func sortArrayByParity(nums []int) []int {
left := 0
right := len(nums) - 1
// 双指针向中间收缩并交换
for left < right {
for left < right && nums[left]%2 == 0 {
left++
}
for left < right && nums[right]%2 == 1 {
right--
}
if left < right {
nums[left], nums[right] = nums[right], nums[left]
left++
right--
}
}
return nums
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 283. 移动零 | 简单 | 双指针 |
| 27. 移除元素 | 简单 | 双指针 |
| 26. 删除有序数组中的重复项 | 简单 | 双指针 |
| 977. 有序数组的平方 | 简单 | 双指针 |
| 75. 颜色分类 | 中等 | 双指针 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
