颜色分类(荷兰国旗问题)

0 阅读1分钟

[75] 颜色分类(荷兰国旗问题)

来源:LeetCode 75
难度:🟡 中等
标签:#数组 #双指针 #排序
日期:2026-04-20

📝 题目描述

给定包含 0(红)、1(白)、2(蓝)的数组,原地排序使相同颜色相邻,且按红、白、蓝顺序排列。

💡 解题思路

  • 使用三指针 leftcurrright
  • left 左边全是 0,right 右边全是 2,curr 扫描中间未知区域。
  • 遇到 0 就换到左边,遇到 2 就换到右边,遇到 1 直接跳过。

🔧 代码实现

var sortColors = function(nums) {
    let left = 0, right = nums.length - 1, curr = 0;
    while (curr <= right) {
        if (nums[curr] === 0) {
            [nums[curr], nums[left]] = [nums[left], nums[curr]];
            left++; curr++;
        } else if (nums[curr] === 2) {
            [nums[curr], nums[right]] = [nums[right], nums[curr]];
            right--;
        } else {
            curr++;
        }
    }
};

📌 易错点

  • 处理 2curr 不能立即增加,因为交换过来的元素可能还是 02,需要再次判断。
  • 循环条件是 curr <= right,当 curr 超过 right 时所有元素已分类完毕。

🔗 相关题目