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

99 颜色分类

颜色分类

    • 题解1 双指针
    • 题解2 单指针

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

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

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

题解1 双指针

class Solution {
public:void sortColors(vector<int>& nums) {const int s = nums.size();// 0对应的位置,1对应的位置int p0, p1;p0 = p1 = 0;for(int i = 0; i < s; i++){if(1 == nums[i]){swap(nums[i], nums[p1]);p1 ++;}else if(0 == nums[i]){swap(nums[i], nums[p0]);// 1比0多,说明p0位置是1if(p0 < p1){// 把1换回来swap(nums[i], nums[p1]);}// 多了个0,p1的位置也往后指了p0 ++;p1 ++;}      }return;}
};

在这里插入图片描述

题解2 单指针

class Solution {
public:void sortColors(vector<int>& nums) {const int s = nums.size();// 0对应的位置,1对应的位置int p;p = 0;// 先换0for(int i = 0; i < s; i++){if(0 == nums[i])swap(nums[p++], nums[i]);}// 再换1for(int i = p; i < s; i++){if(1 == nums[i])swap(nums[p++], nums[i]);}return;}
};

在这里插入图片描述

http://www.lryc.cn/news/224702.html

相关文章:

  • 计算机视觉与深度学习 | 基于GPS/BDS多星座加权图因子优化的行人智能手机导航
  • 低代码平台,业务开发的“银弹”
  • 补偿 FIR 滤波器引入的延迟
  • 图数据库Neo4j详解
  • 系列一、Shiro概述
  • SpringCloudAlibaba——Sentinel
  • Java编写简易rabbitmq生产者与消费者
  • 3.0.3版vsftpd所支持的FTP命令
  • OTA包添加自定义内容
  • Luatos Air700 改变BL0942串口波特率
  • 不可忽视的国外服务器地址IP选择指南
  • C语言 预处理详解
  • c++ async 使用详解,创建异步任务的多种方法
  • 万物皆数——用matlab求解二阶微分方程
  • jmeter接口自动化部署jenkins教程
  • 前端js实现将数组对象组装成自己需要的属性,或者去掉对象中不必要的属性
  • MeterSphere 任意文件读取漏洞(CVE-2023-25814)
  • 设计模式-01-单例设计模式
  • 霍尔电流传感器如何进行可靠性测试?主要应用在哪些领域?
  • pandas按行按列遍历Dataframe的三种方式
  • Api接口如何防止被刷?
  • Django——orm模块创建表关系
  • Django知识点
  • 基于单片机设计的智能风扇(红外线无线控制开关调速定时)
  • k8s报错pause 3.2 解决方案
  • 基于遗传算法的电器分类,基于GA的电器分类
  • 某XX自考小程序的AES加密分析
  • 加密算法笔记
  • Sa-Token拦截全部接口必须登录-然后自定义注解来匿名登录-作为权限框架支持,并且同时使用了注解和路由的拦截器模式,此部分的配置如下:
  • 公司企业端口映射