LeetCode 905. 按奇偶排序数组

题目描述

905. 按奇偶排序数组

思路分析

image-20260329111207941

解法一:双指针交换(推荐)

核心思路

  • 左指针寻找奇数,右指针寻找偶数。
  • 当左右指针都停下时交换元素。
  • 直到两指针相遇结束。


复杂度分析

  • 时间复杂度: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. 颜色分类 中等 双指针
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/97279610
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!