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

Leetcode每日刷题之75. 颜色分类(C++)

有接触过数据结构的同学应该知道排序有很多种类,我之前也出过一篇 排序大杂烩 的博客,其中包含了一部分排序的讲解,排序在我们学习编程的过程中有着至关重要的作用,不论是大部分新手刚开始接触的冒泡排序还是C++库中的sort函数,我们发现排序总是无处不在,所以接下来我将用我接触到的一道题 75. 颜色分类 来带大家了解一个新的排序:三路排序

思路解析 

1. 关于题目我们知道 0 1 2 分别代表了三个不同的颜色,我们要做的就是将被打乱的数组排序成为 001122 这种形式的数组,并且不可以使用库函数 sort,也不可以开辟新的数组,在之前学习快速排序的过程中我们知道,快速排序是通过找出一个目标数字使得其左边均是比自己小的数字右边均是比自己大的数字,最终不断递归得到排列好的数组,但是快速排序有一个致命缺陷就是如果一个数组重复元素过多,那么就会不断退化,最终甚至效率还不如冒泡排序,所以我们有一个新的排序可以用来解决这个问题,那就是:三路排序

2. 三路排序就是首先 for 循环遍历数组将所有的 2 与最后的元素交换,然后使用一个变量          two_flag-- 作为下标不断缩小数组的长度,最终将2均放在数组的右侧,那么就可以使用        while 循环来操作,当然还不能忽略的一个限制条件就是 i < two_flag ,这样才不会越界

3. 对于 0 的操作就简单很多,直接从头开始遍历,创建一个 zero_flag 为下标,将所有0放        在数组的左边,使用 zero_flag ++ 缩小范围,最终 0 和 2 处理完成后 1 自然就在数组的      中间部分

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

代码解析 

1. 根据思路我们可以设计上述代码,首先使用 for 循环遍历数组,再使用 while 循环对数组      中的所有 2 进行右置操作,再使用 if 语句判断是否为 0 ,将 0 进行 左置操作,那么 1 就      自然排序在中间部分,最终返回原数组即可,不用开辟额外的空间也不用使用库函数

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 搭建AI知识库:打造坚实的团队知识堡垒
  • MySQL —— CRUD
  • LeetCode——3143. 正方形中的最多点数
  • Qt Creator卡顿
  • python开发上位机 - PyCharm环境搭建、安装PyQt5及工具
  • k8s中yaml文件的编写
  • mysql 监控开始时间,结束时间,平均取n个时间点
  • Android 14适配记录
  • 智能爬虫ScrapeGraphAI尝鲜
  • Linux Shell编程--脚本运行与变量置换
  • C++ 重要特性探究
  • Java二十三种设计模式-享元模式(12/23)
  • vue3实现商品图片放大镜效果(芋道源码yudao-cloud 二开笔记)
  • Jmeter--http信息头管理器的使用(转载)
  • GESP 一级 比赛
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【译】理解JavaScript:new 关键字
  • 2017-09-12 前端日报
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • HTTP请求重发
  • js对象的深浅拷贝
  • js正则,这点儿就够用了
  • mockjs让前端开发独立于后端
  • Python_OOP
  • Python十分钟制作属于你自己的个性logo
  • ubuntu 下nginx安装 并支持https协议
  • 测试如何在敏捷团队中工作?
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 汉诺塔算法
  • ------- 计算机网络基础
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何解决微信端直接跳WAP端
  • 算法系列——算法入门之递归分而治之思想的实现
  • 优秀架构师必须掌握的架构思维
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​马来语翻译中文去哪比较好?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (笔记)M1使用hombrew安装qemu
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net CHARTING图表控件下载地址
  • .net core 依赖注入的基本用发