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

news2024/12/26 11:47:06

有接触过数据结构的同学应该知道排序有很多种类,我之前也出过一篇 排序大杂烩 的博客,其中包含了一部分排序的讲解,排序在我们学习编程的过程中有着至关重要的作用,不论是大部分新手刚开始接触的冒泡排序还是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 就      自然排序在中间部分,最终返回原数组即可,不用开辟额外的空间也不用使用库函数

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

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

相关文章

对象类作为类成员(详解版)

我们在第13行创建了一个人的类&#xff0c;并且给它赋予了两个属性&#xff0c;一个为int 类型的age,另一个则是Phone类型的 name,众所周知class类是一个自定义的数据类型&#xff0c;和struct相似&#xff0c;两者在默认情况下的权限不一样。而我们这时候没有Phone的数据类型&…

Docker 入门全攻略:安装、操作与常用命令指南

目录 Docker 入门全攻略&#xff1a;安装、操作与常用命令指南 一、引言 二、Docker 下载与安装 2.1 Docker 的系统要求 2.2 安装步骤 ①对于 Windows 的安装指南 ②对于 macOS 的安装指南 ③对于 Linux 的安装指南 三、Docker 的基本概念 3.1 镜像&#xff08;Image…

用Python实现特征工程之特征变换——数值特征的归一化和标准化、类别特征的编码、特征组合和分解、特征缩放

特征工程中的特征变换是一个重要的步骤&#xff0c;旨在通过转换原始特征来提高模型的性能。特征变换主要包括数值特征的归一化和标准化、类别特征的编码、特征组合和分解、以及特征缩放等。下面将详细讲解这些内容&#xff0c;并提供相应的Python代码示例。 1. 数值特征的归一…

为什么要选择开放式耳机?开放式耳机的优缺点

今天咱们来聊聊一个特别有意思的话题&#xff1a;为什么我们要选择开放式耳机&#xff1f;在这个耳机种类繁多的世界里&#xff0c;开放式耳机以其独特的魅力&#xff0c;赢得了不少音乐爱好者和运动达人的青睐。 开放式耳机最大的特点就是它不会完全封闭你的耳朵&#xff0c;这…

C语言之“ 分支和循环 ” (2)

&#x1f339;个人主页&#x1f339;&#xff1a;喜欢草莓熊的bear &#x1f339;专栏&#x1f339;&#xff1a;C语言基础 目录 前言 一、switch语句 1.1 if语句和switch语句的对比 1.2 switch语句中的break 1.3 switch语句中的default 1.4 switch语句中的case和default…

信息系统运维管理:深度解析与方案建议

在现代企业环境中&#xff0c;信息系统运维管理扮演着至关重要的角色。它不仅是信息系统高效、安全和稳定运行的保障&#xff0c;更是企业业务发展的坚实支撑。本文将深入探讨服务设计阶段、服务转换阶段、委托系统维护管理这三个关键阶段&#xff0c;并结合最新的互联网技术和…

Transformer模型注意力机制;层归一化(Layer Normalization)

目录 Transformer模型注意力机制 注意力机制(Attention Mechanism) 层归一化(Layer Normalization) 层归一化的作用 Transformer模型注意力机制 中,有几个关键的公式和概念需要解释,包括注意力机制(Attention Mechanism)和层归一化(Layer Normalization)。以下是…

halcon不良黄豆数量检测和大米视觉处理winform

winform halcon不良黄豆数量检测 不良黄豆数量检测.hdev 首先检测黄豆的数量 然后检测不良黄豆的数量 在winform中对其进行分开显示处理 大米视觉处理类似 这段代码主要用于图像处理和显示&#xff0c;使用的是Halcon语言。让我们逐步解释每个部分的功能&#xff1a; 构造函数…

Adnroid 数据存储:SharedPreferences详解【SharedPreferencesUtils,SharedPreferences的ANR】

目录 1&#xff09;SP是什么、如何使用&#xff0c;SPUtils 2&#xff09;SP的流程 3&#xff09;comit和apply 一、SP是什么&#xff0c;如何使用&#xff0c;SPUtils 1.1 SP是什么&#xff1f; SharedPreferences是Android平台提供的一种轻量级的数据存储方式&#xff0c;…

【Linux SQLite数据库】一、SQLite交叉编译与移植

SQLite 是一个用 C 语言编写的开源、轻量级、快速、独立且高可靠性的 SQL 数据库引擎&#xff0c;它提供了功能齐全的数据库解决方案。SQLite 几乎可以在所有的手机和计算机上运行&#xff0c;它被嵌入到无数人每天都在使用的众多应用程序中。此外&#xff0c;SQLite 还具有稳定…

git push上不去的问题Iremote reiectedl——文件过大的问题

在新建分支的时候&#xff0c;发现push怎么也上传不上去&#xff0c;一开始觉得是权限的问题&#xff0c;但是尝试了各种方案都没有用&#xff0c;后面再仔细看了一下是文件太大了&#xff0c;远程拒绝推送 接下来&#xff0c;和大家讲讲我的解决方案 1、把修改的代码迁移到新…

将QT工程打包生成可单独运行的.exe程序

将QT工程打包生成可单独运行的.exe程序 1、生成exe文件2、导入qt配置文件3、打包qt配置文件和exe文件4、单个可执行exe文件 1、生成exe文件 Qt中执行Release操作&#xff0c;生成对应的exe文件。 Release的路径下会生成如下文件&#xff1a; 进入release文件夹&#xff0c;双…

【Linux基础】Linux基本指令(二)

目录 &#x1f680;前言一&#xff0c;mv指令二&#xff0c;more & less指令2.1 more 指令2.1 less指令 三&#xff0c;重定向技术(重要)3.1 echo指令3.2 输出重定向 >3.3 追加重定向 >>3.4 输入重定向 < 四&#xff0c;head & tail指令4.1 head 指令4.2 t…

应急响应:D盾的简单使用.

什么是应急响应. 一个组织为了 应对 各种网络安全 意外事件 的发生 所做的准备 以及在 事件发生后 所采取的措施 。说白了就是别人攻击你了&#xff0c;你怎么把这个攻击还原&#xff0c;看看别人是怎么攻击的&#xff0c;然后你如何去处理&#xff0c;这就是应急响应。 D盾功…

PLL基本原理、设计及应用

PLL基本原理 锁相环&#xff08;Phase-Locked Loop, PLL&#xff09;是一种基本的反馈控制系统&#xff0c;广泛应用于电子通信、信号处理、时钟同步等多个领域。PLL通过反馈机制锁定输入信号的频率和相位&#xff0c;从而实现输出信号与输入信号的同步。其基本工作原理可以概…

Linux知识复习第2期

RHCE 远程登录服务-CSDN博客 Linux 用户和组管理_linux用户和组的管理-CSDN博客 Linux 文件权限详解-CSDN博客 目录 1、sshd 免密登录 (1)纯净实验环境 (2)生成密钥 (3)上锁 2、用户管理 (1)添加新用户 (2)删除用户 (3)修改用户信息 (4)为用户账号设…

vue路由学习

1、基本了解 &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09;在创建vue项目时&#xff0c;就已经勾选了vue-router 2、 &#xff08;0&#xff09;自己手写了一个新的组件文件(部门管理)&#xff08;DeptView.vue&#xff09; &#xff08;1&a…

金坛网报道数学应用研讨会在坛开幕,赛氪做协办单位出席参加

2024年8月5日-7日&#xff0c;由中国优选法统筹法与经济数学研究会和河海大学联合主办&#xff0c;百度、杉数科技、玻色量子、京东物流、赛氪网协办的第九届数学在企业中的应用研讨会在河海大学常州校区隆重开幕。此次研讨会旨在继承和发扬华罗庚先生倡导的数学与行业应用紧密…

LVS负载均衡+集群+三种工作模式+调度算法及实战案例

一、LVS 1.1简介 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&#xff0c;是由章文嵩主导开发的开源负载均衡项目&#xff0c;目前&#xff0c;LVS已经被集成到Linux内核模块中。该项目实现了在基于IP的数据基础上&#xff0c;请求负载均衡调度方案&a…

如何将PDF文件压缩到最小?五个pdf压缩方法,一键将体积减小70%!

将pdf文件压缩得更小一点&#xff0c;不仅节省设备的存储空间&#xff0c;让电脑运行得更流畅&#xff0c;还有助于我们快速的将pdf文件分享给好友同事。 pdf压缩方法有很多&#xff0c;本文整理了几个关于电脑文件压缩的方法&#xff0c;适用于各个操作系统的电脑&#xff0c;…