75. 颜色分类


文章目录


1.题目

75. 颜色分类

给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,**原地 **对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

我们使用整数 012 分别表示红色、白色和蓝色。

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

复制代码
**输入:**nums = [2,0,2,1,1,0]
**输出:**[0,0,1,1,2,2]

示例 2:

复制代码
**输入:**nums = [2,0,1]
**输出:**[0,1,2]

提示:

复制代码
- `n == nums.length`

- `1 <= n <= 300`

- `nums[i]` 为 `0`、`1` 或 `2`

2.思路

  1. 定义两个指针
    • left:指向数组的最左边,表示 0(红色)的边界。
    • right:指向数组的最右边,表示 2(蓝色)的边界。
  2. 遍历数组
    • 如果当前数字是 0,就把它放到 left 的位置,然后 left 向右移动。
    • 如果当前数字是 2,就把它放到 right 的位置,然后 right 向左移动。
    • 如果当前数字是 1,就跳过,继续遍历。

注意:left 初始化为-1是因为最开始没有安排好第一个位置,所以不好初始化为0,right同理

3.代码

c++ 复制代码
class Solution {
public:
    void sortColors(vector<int>& nums) {
        // 定义两个指针,left 指向 0 的边界,right 指向 2 的边界
        int left = -1, right = nums.size();
        // tmp 是当前遍历的位置
        int tmp = 0;

        // 遍历数组
        while (tmp < right) {
            if (nums[tmp] == 0) {
                // 如果当前数字是 0,把它放到 left 的位置
                ++left;  // left 向右移动
                swap(nums[tmp], nums[left]);  // 交换当前数字和 left 位置的数字
                ++tmp;  // 继续遍历下一个数字
            } else if (nums[tmp] == 2) {
                // 如果当前数字是 2,把它放到 right 的位置
                --right;  // right 向左移动
                swap(nums[tmp], nums[right]);  // 交换当前数字和 right 位置的数字
                // 注意:这里不需要移动 tmp,因为交换后的数字可能是 0 或 1,需要再次检查
            } else {
                // 如果当前数字是 1,直接跳过
                ++tmp;  // 继续遍历下一个数字
            }
        }
    }
};

相关推荐
wabs6661 小时前
关于贪心算法的一些自我总结【力扣45.跳跃游戏II】【灵感来源:代码随想录】
算法·贪心算法·复盘
2401_876964131 小时前
【湖北专升本】2026湖北专升本真题PDF+备考资料汇总
数据结构·人工智能·经验分享·深度学习·算法·计算机视觉
嗝o゚2 小时前
CANN GE 算子融合——融合算法与调度策略
算法·昇腾·cann·ge
小江的记录本2 小时前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
Ulyanov3 小时前
用声明式语法重新定义Python桌面UI:QML+PySide6现代开发入门(一)
开发语言·python·算法·ui·系统仿真·雷达电子对抗仿真
数据科学小丫4 小时前
特征工程处理
人工智能·算法·机器学习
z落落4 小时前
C#参数区别
java·算法·c#
c238565 小时前
vector(下)
数据结构·算法
z落落5 小时前
C# 冒泡排序+选择排序 + Array.Sort 自定义排序
数据结构·算法
wyy185100737285 小时前
双路并行:一套匹配算法如何解决中文制单的两大核心难题
算法·ai·crm·crm系统