LeetCode 922. 按奇偶排序数组 II

题目描述

922. 按奇偶排序数组 II

image-20230311222317232

思路分析

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

核心思路

  • 使用两个指针 ij,分别遍历偶数索引与奇数索引。
  • 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. 排序数组 中等 排序
本文作者:
本文链接: https://hgnulb.github.io/blog/2022/47978640
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!