力扣精选算法100道——颜色分类(双指针和三指针俩种方法解决此题)

目录

🚩了解题意

🚩算法分析

第一种方法:双指针

🚩代码实现一

第二种方法:三指针

🚩代码实现二


🚩了解题意

本题将整数0,1,2代表红白篮,nums中的整数并不是按照红白蓝的顺序排列,我们要做的就是让nums中的整数按红白蓝排列,比如样例中的nums={2,0,2,1,1,0}最终按照红0白1篮2的顺序排列,最终的结果是{0,0,1,1,2,2}。

就是将0红排列在一起,1白排列在一起,2蓝排列在一起。


🚩算法分析

第一种方法:双指针

利用i进行遍历数组,ptr来进行划分范围,最终得到的结果是

[0,ptr-1] 红色

[ptr,size-1] 白色和蓝色

如果nums[i]==0的时候我们就将nums[i]的值和nums[ptr]的值交换,然后ptr++

i遍历完之后,我们看到所有的0都再最左边,再进行一次遍历,但是这时候的i是从ptr开始的

因为上面nums[i]和nums[ptr]交换位置之后,ptr++,所以ptr再下标2的位置。i从下标2开始进行。

如果遇到nums[i]==1的时候,我们就将nums[i]和nums[ptr]交换位置,ptr++。


🚩代码实现一

class Solution {
public:void sortColors(vector<int>& nums) {int n = nums.size();int ptr = 0;for (int i = 0; i < n; ++i) {if (nums[i] == 0) {swap(nums[i], nums[ptr]);++ptr;}}for (int i = ptr; i < n; ++i) {if (nums[i] == 1) {swap(nums[i], nums[ptr]);++ptr;}}}
};

第二种方法:三指针

利用i来遍历数组,left作为左指针,right作为右指针

如果nums[i]==0,先让left++,然后与nums[i]和nums[left]交换位置,然后i++。

如果nums[i]==2,先让--right,然后与nums[i]和nums[right]交换位置。

注意:这里的i并不往后走,因为i是待扫描的区域,就是Num[i]是未知的数字,我们要继续判断nums[i]是等于多少,再进行一次判断。

此时继续判断nums[i]等于多少,此时的nums[i]==2,那么让right先--,然后交换nums[i]和nums[right]的值。

如果我们不知道nums[i]的值,我们就不能让i++.

如果nums[i]==1,我们直接就让i++

最终的循环判断条件就是 i<right即可,i与right相遇就结束循环。


🚩代码实现二

class Solution {
public:void sortColors(vector<int>& nums) {int left=-1,right=nums.size();int n=nums.size();int i=0;while(i<right){if(nums[i]==0)swap(nums[++left],nums[i++]);else if(nums[i]==1)i++;else swap(nums[--right],nums[i]);//此时的i不能++,因为i对应的值是未扫描的部分}}
};

关关难过。

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

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

相关文章

仿牛客网项目---私信列表和发送列表功能的实现

这篇文章我们来讲一下我的这个项目的另外一个功能&#xff1a;私信列表和发送列表功能。 先来设计DAO层。 Mapper public interface MessageMapper {// 查询当前用户的会话列表,针对每个会话只返回一条最新的私信.List<Message> selectConversations(int userId, int of…

【激光SLAM】基于已知位姿的构图算法 (Grid-based)

文章目录 地图分类概念 覆盖栅格建图算法栅格地图的特征数学描述假设 算法流程激光雷达的逆观测模型 计数(Count Model)建图算法概念数学描述观测模型地图估计 地图分类 概念 地图即为环境的空间模型。环境地图是机器人进行定位和规划的前提。定位可以用特征地图&#xff08;…

基础内容哦!!!吴恩达deeplearning.ai:利用计算图求导(反向传播)

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 一个小型神经网络的例子利用计算图逐步计算价值函数J利用计算图求出价值函数的导数 计算图是深度学习中的一个关键概念&#xff0c;它也是Tensorflow等编程框架自动计算神经网络导…

Linux之sed命令详解及实践

1、定义 sed全称是&#xff1a;stream editor 流编辑器 对文件的操作无非就是”增删改查“&#xff0c;**sed命令就是实现对文件的”增删改查“。** **man sed//man 的解释** 用于过滤和转换文本的流编辑器 2、功能 Sed 主要用来自动编辑一个或多个文件、简化对文件的反复…

实现定时器的两种方法:使用windows api定时器 和使用c++11/14 定时器

前言&#xff1a; 当我有一个开发需求&#xff0c;符合下面的条件 1.需要某个任务在程序中每隔一段时间就要执行一次&#xff0c;可能把这个任务封装成了一个函数。 2.这种需要定时执行的任务&#xff0c;有2个&#xff0c;3个....越来越多。 这个时候我们就可以考虑使用定时…

第三百七十六回

文章目录 1 .概念介绍2. 实现方法3. 示例代码 我们在上一章回中介绍了在页面之间共传递数据相关的内容&#xff0c;本章回中将介绍如何拦截路由.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 .概念介绍 本章回中介绍的路由拦截是指在路由运行过程中&#xff0c;对路由做…

论文阅读_代码生成模型_CodeLlama

英文名称: Code Llama: Open Foundation Models for Code 中文名称: Code Llama&#xff1a;开放基础代码模型 链接: https://arxiv.org/abs/2308.12950 代码: https://github.com/facebookresearch/codellama 作者: Baptiste Rozire, Jonas Gehring, Fabian Gloeckle, Sten So…

【前端素材】推荐优质在线花卉商城电商网页Flowery平台模板(附源码)

一、需求分析 1、系统定义 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台&#xff0c;用户可以在该平台上浏览、选择和购买各种花卉产品。 2、功能需求 在线花卉商城是一个通过互联网提供花卉销售服务的电子商务平台&#xff0c;用户可以在该平台上浏览、选…

vscode在windows环境不能使用终端安装依赖

会报这样的错误提示 解决思路&#xff1a; 1、vscode用管理员打开 (非必须) 2、设置策略 打开 windows powerShell . 输入命令 set-ExecutionPolicy RemoteSigned 然后 Y . 查看是否设置成功 get-executionpolicy 3、下载总是超时&#xff0c;设置镜像源 查看镜像源 npm …

蓝桥杯-天数

//此题属于简单 #include <iostream> using namespace std; int main() { int n; cin>>n; if(n2) { cout<<28; return 0; } if(n1||n3||n5||n7||n8||n10||n12)//一定要记得写成n什么&#xff0c;每个都要写&#xff0c;不要漏掉 { cou…

常见漏洞的流量特征

1、SQL注入漏洞 查看url / Referer字段/User-Agent字段/cookie字段 出现一些特殊字符&#xff08;eg&#xff1a;单引号【‘】、双引号【“”】、括号【&#xff08;&#xff09;】、单引号括号【‘&#xff08;】、双引号括号【“&#xff08;】等一些常见的特殊的字符&#…

数通HCIE和云计算HCIE哪个好一点?

数通是网络的基础知识&#xff0c;也是入门人员必学的方向&#xff0c;相对也会简单些&#xff0c;学习数通&#xff0c;可以很好的学习其他的方向。数通的就业范围也比较广&#xff0c;运营商、企业、政府还是互联网公司&#xff0c;都需要大量的数通工程师来搭建和维护网络&a…

大数据毕业设计之前端04:管理系统为什么要自己实现图标组件

关键字&#xff1a;BuildAdmin、Icon、图标、Vue、ElementUI 前言 说到图标&#xff0c;在BuildAdmin中用到的地方很多。比如上一篇中的折叠图标&#xff0c;还有菜单栏图标、导航菜单栏图标等。常见的图标有&#xff1a;ElementUI图标、font-awesome、iconfont阿里图标以及本…

94. 递归实现排列型枚举 刷题笔记

思路 依次枚举 每个位置用哪个数字 要求按照字典序最小来输出 而每次搜索下一层时i都是从1开始 也就是说 如果有小的数可以填上 那么该方案会填上这个数字 例如 当n等于3 第一次搜索 1 2 3输出后返回 返回后此时i3 第二个位置填3 1 3 2 输出后返回 此时返回到第一层…

云计算 2月21号 (linux文件及用户管理)

一、文件管理 1.1快捷键 编辑命令&#xff1a; Ctrl a &#xff1a;移到命令行首 Ctrl e &#xff1a;移到命令行尾 Ctrl u &#xff1a;从光标处删除至命令行首 Ctrl k &#xff1a;从光标处删除至命令行尾 Ctrl w &#xff1a;从光标处删除至字首 Ctrl d &#x…

20240301-2-ZooKeeper面试题(二)

11. Chroot 特性 3.2.0 版本后&#xff0c;添加了 Chroot 特性&#xff0c;该特性允许每个客户端为自己设置一个命名空间。如果一个客户端设置了 Chroot&#xff0c;那么该客户端对服务器的任何操作&#xff0c;都将会被限制在其自己的命名空间下。 通过设置 Chroot&#xff…

Win11远程桌面登陆教程

必备软件 Remote Desktop 这个软件用于便捷操作 Tailscale 这个用于创建虚拟局域网让两台设备处于同一个网段便于远程连接 详细步骤 0、打开电脑设置允许远程连接模式 把这里的开关打开就行。 1、设置允许登陆的用户以及密码 在管理员模式下的宿主电脑上面输入以下命令…

寒假作业Day 02

这是第二天的作业&#xff0c;fighting&#xff01; Day 02 一、选择题 首先char* s[6]是指针数组&#xff0c;也就是其存储的都是这些字符串的地址&#xff0c;其实际上的类型为char**&#xff0c;而fun函数传入了s数组的首地址。而后续fun函数中打印字符&#xff0c;p[i]即…

ad18学习笔记十六:如何放置精准焊盘到特定位置,捕抓功能的讲解

网上倒是一堆相关的指导 AD软件熟练度提升&#xff0c;如何设置板框捕捉&#xff1f;_哔哩哔哩_bilibili 关于Altium Designer 20 的捕抓功能的讲解_ad捕捉设置-CSDN博客 AD软件捕捉进阶实例&#xff0c;如何精确的放置布局元器件&#xff1f;_哔哩哔哩_bilibili AD绘制PCB…

项目-SERVER模块-Socket模块

Socket模块 一、Socket模块是什么&#xff1f;二、代码实现1.成员变量2.构造、析构函数3.获取套接字文件描述符4.创建套接字5.绑定地址信息6.开始监听连接请求7.向服务器发起连接8.获取新连接9.接收数据10.非阻塞接收数据11.发送数据12.非阻塞发送数据13.关闭套接字14.创建一个…