当前位置: 首页 > article >正文

【5.5】指针算法-三指针解决颜色分类

一、题目

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

        此题中,我们使用整数0、1和2分别表示红色、白色和蓝色。

示例 1:

输入:nums = [2,0,2,1,1,0]

输出:[0,0,1,1,2,2]

示例 2:

输入:nums = [2,0,1]

输出:[0,1,2]

示例 3:

输入:nums = [0]

输出:[0]

示例 4:

输入:nums = [1]

输出:[1]

提示:

  • n == nums.length

  • 1 <= n <= 300

  • nums[i] 为 0、1 或 2

二、解题思路

        数组中仅包含三种数字:0、1、2。我们只需将 0 移至前面,将 3 移至后面即可。难度并非很大。下面以示例一为例,来看如下动图。

三、代码实现

#include <iostream>
#include <vector>

using namespace std;

// 交换数组中的两个数字
void swap(vector<int>& nums, int i, int j) {
    int tmp = nums[i];
    nums[i] = nums[j];
    nums[j] = tmp;
}

// 三指针排序
void sortColors(vector<int>& nums) {
    // 0的右边界
    int left = 0;
    // 2的左边界
    int right = nums.size() - 1;
    // 指向当前数字
    int index = 0;
    while (index <= right) {
        if (nums[index] == 0) {
            // 如果是0,就往前面移
            swap(nums, left++, index++);
        } else if (nums[index] == 1) {
            index++;
        } else if (nums[index] == 2) {
            // 如果是2就往后面移
            swap(nums, right--, index);
        }
    }
}

int main() {
    vector<int> nums = {2, 0, 2, 1, 1, 0};
    sortColors(nums);

    for (int num : nums) {
        cout << num << " ";
    }
    cout << endl;

    return 0;
}


http://www.kler.cn/a/374770.html

相关文章:

  • C++23新特性解析:[[assume]]属性
  • 精准提升:从94.5%到99.4%——目标检测调优全纪录
  • 快速部署一套Kubernetes集群
  • windows11家庭版安装docker无法识别基于wsl2的Ubuntu
  • 微机接口课设——基于Proteus和8086的打地鼠设计(8255、8253、8259)
  • SQL 实战:窗口函数的妙用 – 分析排名与分组聚合
  • 插件/贴片沉板 RJ45 网口连接器在网通领域的具体应用
  • linux下一个应用是如何被执行的
  • 便携剃须刀性能王者,小但专业,未野MAX SE剃须刀测评
  • Arduino 74HC595芯片引脚拓展使用详解
  • 使用 python中 pandas 将 Excel 转换为 CSV 文件
  • 无人机3D模拟训练飞行技术详解
  • springboot导出pdf,解决中文问题
  • 在 Android 设备上部署一个 LLM(大语言模型)并通过 Binder 通信提供服务
  • Java 字符流详解
  • Zoho Desk系统解锁工单自动化 分配效率翻倍
  • ffmpeg拉流分段存储到文件-笔记
  • SC5120家庭总线收发器可pin to pin兼容MAX22088
  • WAF+AI结合,雷池社区版的强大防守能力
  • scp免密传输教程
  • QT 跨平台优势独特,效果实例设计精彩呈现
  • 【Redis】内存淘汰策略
  • sqoop Oracle to hive出现 Error Msg = ORA-00933: SQL 命令未正确结束
  • 3周岁孤独症儿童:治愈的希望还是幻想?
  • 一文读懂 HTTP Cookies
  • Python批量查找包含多个关键词的PDF文件