首页 > 其他分享 >75. 颜色分类

75. 颜色分类

时间:2023-10-19 13:55:33浏览次数:39  
标签:blue 分类 颜色 白色 元素 75 white red 指针

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

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

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

 

示例 1:

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

思路

遍历数组,维护三个指针red、white和blue,分别指向红色、白色和蓝色区域的边界。初始时,red和white指向数组开头,blue指向数组尾部。

遍历过程中,如果遇到红色元素,将其与red指针指向的白色元素交换,并将red和white指针向后移动一位;如果遇到白色元素,将white指针向后移动一位;如果遇到蓝色元素,将其与blue指针指向的白色元素交换,并将blue指针向前移动一位。

遍历结束时,红色区域的元素都在数组的左侧,蓝色区域的元素都在数组的右侧,白色区域的元素都在中间,即完成了排序。


class Solution {
public:
    void sortColors(vector<int> &nums){
        const int numsSize = nums.size();

        int red = 0; // 红色区域边界
        int white = 0; // 白色区域边界
        int blue = numsSize - 1; // 蓝色区域边界
        
        while (white <= blue) {
            if (nums[white] == 0) {
                // 将红色元素与白色元素交换,并将红色区域边界和白色区域边界向后移动一位
                swap(nums[white], nums[red]);
                red++;
                white++;
            } else if (nums[white] == 2) {
                // 将蓝色元素与白色元素交换,并将蓝色区域边界向前移动一位
                swap(nums[white], nums[blue]);
                blue--;
            } else {
                // 遇到白色元素,将白色区域边界向后移动一位
                white++;
            }
        }
    }
};

标签:blue,分类,颜色,白色,元素,75,white,red,指针
From: https://www.cnblogs.com/lihaoxiang/p/17774531.html

相关文章

  • 神经网络基础篇:详解二分类(Binary Classification)
    二分类注:当实现一个神经网络的时候,通常不直接使用for循环来遍历整个训练集(编程tips)举例逻辑回归逻辑回归是一个用于二分类(binaryclassification)的算法。首先从一个问题开始说起,这里有一个二分类问题的例子,假如有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签......
  • Linux shell编程学习笔记4:修改命令行提示符格式(内容和颜色)
    一、命令行提示符格式内容因shell类型而异Linux终端命令行提示符内容格式则因shell的类型而异,例如CoreLinux默认的shell是sh,其命令行提示符为黑底白字,内容为:tc@box:/$其中,tc为当前用户名,box为主机名,/为当前目录路径,$表示当前用户类型是普通用户 。 二、环境变量PS1存储了命令行提......
  • 小型气象站的结构和分类
    功能及特点:◆实时监测风速、风向、雨量、空气温度、空气湿度、光照强度、土壤温度、土壤湿度、蒸发量、大气压力等气象要素参数;◆气象数据记录仪具有气象数据采集、气象数据定时存储、参数设定、参数和气象历史数据断电自动保护等功能;◆可靠运行于各种恶的野外环境,低功耗、高稳......
  • Dotnet工具箱:开源、免费的纯前端工具网站,带你探索10大工具分类和73个实时在线小工具
    https://www.cnblogs.com/Dotnet9-com/p/17767405.html1.前言大家好,我是沙漠尽头的狼。Dotnet工具箱是一个纯前端的、开源和免费的工具网站,周末我参考了开源项目it-tools,对网站界面文字进行了汉化,并重新部署了网站。该网站共有10大工具分类,提供了73个实时在线小工具。使用Vue3......
  • C#/.NET/.NET Core优秀项目和框架精选(2023年10月更新,项目分类已整理完成欢迎大家踊跃
    https://www.cnblogs.com/Can-daydayup/p/17758479.html思维导航前言开源框架开源项目实用工具&软件实用SDK&类库界面&控件&UI库加入DotNetGuide技术交流群前言帮助开发者发现功能强大、性能优越、创新前沿、简单易用的C#/.NET/.NETCore优秀项目和框架,无论你是寻......
  • 修改input元素placeholder字体颜色
    1/*webkit*/2::-webkit-input-placeholder{3color:#ffffff;4}5/*MozillaFirefox4to18*/6:-moz-placeholder{7color:#ffffff;8}9/*MozillaFirefox19+*/10::-moz-placeholder{11color:#ffffff;12}13/*Interne......
  • python 颜色 调色板 RGB 代码 调色板 网站
    #定义可用的颜色#colors=['red','blue','green','yellow','Orchid','purple','cyan','black',#'LightPink','Violet','Indigo','Ligh......
  • 排序算法稳定性分类
    稳定排序算法是指在排序过程中能够保持相等元素的相对顺序不变的排序算法。以下是一些常见的稳定排序算法:1.冒泡排序(BubbleSort)2.插入排序(InsertionSort)3.归并排序(MergeSort)4.计数排序(CountingSort)5.基数排序(RadixSort)6.桶排序(BucketSort)而不稳定排序算法是指在排序过......
  • 【漏洞复现】Apache RocketMQ 代码注入漏洞(CVE-2023-37582)
    产品介绍ApacheRocketMQ是美国阿帕奇(Apache)基金会的一款轻量级的数据处理平台和消息传递引擎。漏洞概述ApacheRocketMQ存在代码注入漏洞,该漏洞源于当NameServer地址在外网泄露且缺乏权限验证时,NameServer组件仍然存在远程命令执行漏洞,在RocketMQ5.1.0及以下版本,在一定......
  • T175410 分成互质组
    T175410分成互质组因为n很小,直接暴力枚举两种状态:1.放入桶中。如果当前数字可以放入某个桶中,放入。如果可以放入多个桶,先一个一个来,全部枚举。注意:枚举完之后记得恢复现场2.新开辟一个桶。如果不能放入,则开辟一个桶。如果可以放入,也可以选着不放入,再新开辟一个桶:防止遗留......