[75] 颜色分类(荷兰国旗问题)
来源:LeetCode 75
难度:🟡 中等
标签:#数组 #双指针 #排序
日期:2026-04-20
📝 题目描述
给定包含 0(红)、1(白)、2(蓝)的数组,原地排序使相同颜色相邻,且按红、白、蓝顺序排列。
💡 解题思路
- 使用三指针
left、curr、right。 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++;
}
}
};
📌 易错点
- 处理
2时curr不能立即增加,因为交换过来的元素可能还是0或2,需要再次判断。 - 循环条件是
curr <= right,当curr超过right时所有元素已分类完毕。