颜色分类 - LeetCode 热题 98

大家好!我是曾续缘💘

今天是《LeetCode 热题 100》系列

发车第 98 天

技巧第 3 题

❤️点赞 👍 收藏 ⭐再看,养成习惯

颜色分类

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

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

    必须在不使用库内置的 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]012

    进阶:

    • 你能想出一个仅使用常数空间的一趟扫描算法吗?
    难度:💖💖

    解题方法

    这道题目是要求对一个数组进行排序,数组中包含红色(0)、白色(1)和蓝色(2)三种元素,要求将相同颜色的元素相邻,并按照红色、白色、蓝色的顺序排列。

    1. 首先定义两个指针 p0p1,初始值都为 0。这两个指针分别用来标记下一个应该放置 0 的位置和下一个应该放置 1 的位置。
    2. 遍历数组,如果当前元素为 1,则将其与指针 p1 指向的元素交换,并将 p1 向后移动一位。
    3. 如果当前元素为 0,则将其与指针 p0 指向的元素交换。此时需要判断 p0 是否小于 p1,若是,则再将**新的当前元素1**与 p1 指向的元素交换,然后分别将 p0p1 向后移动一位。
    4. 遍历完成后,数组就会按照要求进行排序。

    Code

    class Solution {// 定义一个方法来排序数组public void sortColors(int[] nums) {int n = nums.length; // 获取数组的长度int p0 = 0, p1 = 0; // 初始化两个指针,p0和p1// 遍历数组中的每一个元素for (int i = 0; i < n; ++i) {if (nums[i] == 1) {// 如果当前元素是1,那么它应该位于p0和p1之间swap(nums, i, p1);++p1; // 将p1向前移动一位} else if (nums[i] == 0) {// 如果当前元素是0,那么它应该位于最前面swap(nums, i, p0);if (p0 < p1) {// 如果p0小于p1,那么说明0被交换到了p1的位置,// 此时需要将p1位置的元素交换回p0位置swap(nums, i, p1);}++p0; // 将p0向前移动一位++p1; // 同时将p1也向前移动一位}}}// 定义一个方法来交换数组中的两个元素private void swap(int[] nums, int i, int j) {int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}
    }

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29925.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    等保2.0中,如何理解和实施安全管理中心的支持作用?

    等保2.0&#xff0c;即《信息安全技术 网络安全等级保护基本要求》的第二版&#xff0c;是中国关于网络安全保护的一项重要标准。它强调了一个中心和三重防护的概念&#xff0c;其中的“一个中心”指的就是安全管理中心&#xff08;Security Management Center,简称SMC&#xf…

    标题:高考后的抉择:专业优先还是学校优先?

    标题&#xff1a;高考后的抉择&#xff1a;专业优先还是学校优先&#xff1f; 随着2024年高考的落幕&#xff0c;考生们面临着一个重要的抉择&#xff1a;在分数限制的条件下&#xff0c;是选择一个心仪的专业&#xff0c;还是选择一个知名度更高的学校&#xff1f;这个问题没…

    代理四川公司疑难商标办理商标异议复审办理

    申请商标注册或者办理其他商标事宜&#xff0c;可以自行办理&#xff0c;也可以委托依法设立的商标代理机构办理。外国人或者外国企业在中国申请商标注册和办理其他商标事宜的&#xff0c;应当委托依法设立的商标代理机构办理&#xff0c;按照被代理人的委托办理商标注册申请或…

    【串口通信-USART】

    串口通信 前言一、串行通信和并行通信二、波特率三、USRAT如何实现USART 四、通信的时候共地五、奇偶校验位总结 前言 大三上时候的笔记⇨32入门-串口通信-发送和接收数据&#x1f31f;更加偏向32部分的吧。 大三上左右的时候写过串口通信的笔记&#xff0c;那时候虽然青涩啥也…

    广告~~~

    大家还记不记得我在之前提到的姜乙&#xff0c;现在&#xff0c;我们的误会解除了&#xff0c;他也是很有实力的&#xff0c;我为他宣传一下&#xff0c;CSDN名&#xff1a;Cpp_King&#xff0c;就他Cpp_King-CSDN博客

    物联网协议应用

    目录 前言一、WIFI简介二、NTP协议2.1 NTP简介2.2 NTP实现 三、HTTP协议3.1 HTTP协议简介3.2 HTTP服务器 四、MQTT协议4.1 MQTT协议简介4.1.1 MQTT通信模型4.1.2 MQTT协议实现原理4.1.3 MQTT 控制报文 4.2 移植MQTT协议 前言 本文主要介绍一下物联网协议如NTP协议、HTTP协议和M…

    Go Gin框架

    一、Gin介绍 Gin是一个用Go编写的HTTPweb框架。它是一个类似于martini但拥有更好性能的API框架, 优于httprouter&#xff0c;速度提高了近 40 倍。点击此处访问Gin官方中文文档。 二、安装 1、安装Gin go get -u github.com/gin-gonic/gin 2、代码中引入 import "githu…

    数字OT训练系统常见问题解析

    随着科技的飞速发展&#xff0c;数字化技术已经深入到医疗康复领域&#xff0c;数字OT&#xff08;Occupational Therapy&#xff0c;职业疗法&#xff09;训练系统作为一种创新性的康复工具&#xff0c;为康复患者提供了更加精准、个性化的治疗方案。然而&#xff0c;在使用过…

    整数转换00

    题目链接 整数转换 题目描述 注意点 A&#xff0c;B范围在[-2147483648, 2147483647]之间 解答思路 比较A、B每一个数位是否相同&#xff0c;如果不同则res 1比较每一位的方法是&#xff1a;将数字右移i位&#xff0c;再将其与1进行’&操作&#xff0c;就可以得到数字…

    《逆贫大叔》:一部穿越时光的温情史诗

    《逆贫大叔》&#xff1a;一部穿越时光的温情史诗 在历史的长河中&#xff0c;有些故事能够穿越时光的尘埃&#xff0c;直击人心。《逆贫大叔》就是这样一部作品&#xff0c;它不仅是一部电视剧&#xff0c;更是一段历史的缩影&#xff0c;一次心灵的触动。 背景设定&#xff1…

    HTML静态网页成品作业(HTML+CSS)——企业摄影网介绍网页(3个页面)

    &#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。 二、作品演示 三、代…

    VOCO原理

    A Simple-yet-Effective Volume Contrastive Learning Framework for 3D Medical Image Analysis 一个简单而有效的三维医学图像分析体积对比学习框架 是通过自监督学习搭建的学习框架 自监督学习是无监督学习下的一个分支&#xff1b; 它通过从未标注的数据中生成伪标签来进…

    金融科技在资产管理领域的创新实践

    一、引言 随着科技的飞速发展&#xff0c;金融科技&#xff08;FinTech&#xff09;逐渐渗透到金融行业的各个领域&#xff0c;资产管理作为金融行业的核心之一&#xff0c;也迎来了金融科技带来的深刻变革。金融科技不仅改变了资产管理的传统模式&#xff0c;也极大地提高了资…

    iOS ------ 对象的本质

    一&#xff0c;OC对象本质&#xff0c;用clang编译main.m OC对象结构都是通过基础的C/C结构体实现的&#xff0c;我们通过创建OC文件及对象&#xff0c;将OC对象转化为C文件来探寻OC对象的本质。 代码&#xff1a; interface HTPerson : NSObject property(nonatomic,strong)…

    MySQL全解(基础)-(MySQL的安装与配置,数据库基础操作(CRUD,聚合,约束,联合查询),索引,事务)

    MySQL安装与配置 1.数据库介绍 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便数据库存储介质&#xff1a; 磁盘 内存 为了…

    Python酷库之旅-比翼双飞情侣库(15)

    目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …

    架构模式——微内核架构的探索与展望

    背景 在计算机科学和操作系统设计的广阔领域中&#xff0c;微内核架构以其独特的设计哲学和优势引起了广泛的关注。微内核&#xff0c;顾名思义&#xff0c;是一种精简至极的内核设计&#xff0c;旨在通过最小化内核的大小来增强系统的安全性、稳定性和可扩展性。本文将深入探…

    QT基础 - 布局管理器间隔控件

    目录 一. QVBoxLayout 二. QHBoxLayout 三. QGridLayout 四. QFormLayout 五. Spacers 六.总结 一. QVBoxLayout QVBoxLayout 主要用于将控件在垂直方向上进行排列。 它具有以下特点&#xff1a; 可以方便地管理和组织控件&#xff0c;使其按照垂直顺序依次排列。能够自动…

    tensorboard基本使用

    tensorboard基本介绍 conda下安装tensorboard 使用conda安装 conda install tensorboard2、tensorboard的基本使用 1、创建一个tensorboard-test.py 代码如下 # tensorboard-test.py from tensorboardX import SummaryWriter# 创建一个"my-log"的tensorboard日志…

    Vue10-实战快速上手

    实战快速上手 我们采用实战教学模式并结合ElementUI组件库&#xff0c;将所需知识点应用到实际中&#xff0c;以最快速度带领大家掌握Vue的使用&#xff1b; 1、创建工程 注意&#xff1a;命令行都要使用管理员模式运行 1、创建一个名为hello-vue的工程vue init webpack hel…