leetcode 75. 颜色分类(medium)(优质解法)

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

代码:

class Solution {
    public void sortColors(int[] nums) {
        int left=-1,right=nums.length,i=0;
        while(i<right){
            if(nums[i]==0){
                left++;
                swap(nums,left,i);
                i++;
            }else if(nums[i]==1){
                i++;
            }else{
                right--;
                swap(nums,right,i);
            }
        }
    }

    public void swap(int[] nums,int i,int j){
        int tmp=nums[i];
        nums[i]=nums[j];
        nums[j]=tmp;
    }
}

题解:

        本题的含义很清晰,对于数组中 0,1,2 三种数据,我们要将其进行排序,如果用普通的排序方法来解决该题不是最好的办法

        该题要把数组中的数据分为 3 个区间,分别是等于 0,1,2 的区间,我们可以通过定义两个指针来帮助划分区间,如下图所示:

        其中 left 指针指向最后一个 0 的位置,right 指针指向第一个 2 的位置,i 指针用来遍历数组,划分遍历到的数据

        i 指针遍历数组时会遇到以下 3 种情况:

        (1).nums[ i ] = 0 ,需要将 0 数据放到 [ 0,left ],区间,所以需要先执行 left++,为 0 数据留出一个位置,交换 left 和 i 下标对应的数据,left ++ 以后指向的数据为 1,将 1 交换到 i 下标刚好放到了 1 区间,所以直接 i ++ 去处理下一个数据即可,依次要执行的代码是: left++ ,swap( ledt,i ) ,i++

        (2).nums[ i ] = 1 ,由于 1 区间就在 i 下标之前,所以当前遍历到的数据 1 实际上就在 1 区间中,直接 i++ 即可

        (3).nums[ i ] = 2,需要将 2 数据放到 [ right , nums.length-1] 区间,先让 right - - ,为 2 数据留出一个位置,交换 right 和 i 下标对应的数据,right - - 以后指向的数据是未处理的数据,该未处理的数据经过交换到达了 i 下标,所以此时还需要对 i 下标指向的数据进行处理,i 指针不能 ++,依次要执行的代码是:right - -,swap ( right , i ) ,

        当 i = right 时就不存在未处理的数据了,处理完毕,划分结束

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大师计划1.0 - log2 CRTO笔记

CRTOⅠ笔记 log2 这个笔记是我在2023年11月23日-12月22日中&#xff0c;学习CRTO所做的一些笔记。 事实上TryHackMe的路径和htb学院包含了许多CRTO的知识并且甚至还超出了CRTO&#xff08;CS除外&#xff09;&#xff0c;所以很多东西在THM和htb学院学过&#xff0c;这次CRTO等…

LLM应用于MPC

现有的基于学习的自动驾驶系统&#xff08;AD&#xff09;在理解高级信息和提供可解释性方面存在挑战。为了解决这些问题&#xff0c;这项工作采用LLM作为复杂AD场景的决策组件。作者设计了认知途径&#xff08;cognitive pathway&#xff09;来实现LLM的综合推理&#xff0c;并…

软件接口测试是什么?怎么测?

软件测试是一条超级长的跑道&#xff0c;最好分阶段来跑&#xff1a;先入行&#xff0c;后精通。网上能看到很多软件测试的帖子&#xff0c;但能够准确分类详细介绍的并不多。正好最近有时间&#xff0c;就把我所了解的软件测试做一个小小总结&#xff0c;对你有帮助的话&#…

【100个Cocos实例】环形ScrollView的实现方法

引言 Cocos中环形ScrollView的实现 大家好&#xff0c;今天是圣诞节&#xff0c;又是寒冷的一天。 在游戏开发中经常需要用到ScrollView去实现滚动的列表。 他通常包括垂直方向和水平方向两个选择。 本文将介绍一下ScrollView环形方向的实现。 本文源工程可在文末阅读原文…

ServletContext对象和ServletConfig对象

Servlet几个重要的类的关系图 ServletContext对象 问题&#xff1a; Request解决了一次请求内的数据共享问题&#xff0c;session解决了用户不同请求的数据共享问题&#xff0c;那么不同的用户的数据共享该怎么办呢&#xff1f; 解决&#xff1a;使用ServletContext对象 作…

关键字:extends关键字

在 Java 中&#xff0c;extends 是一个关键字&#xff0c;用于表示继承关系。当一个类使用 extends 关键字时&#xff0c;它表示该类是一个子类&#xff0c;并且继承了父类的属性和方法。 以下是 extends 关键字的解析&#xff1a; 语法&#xff1a; 描述&#xff1a; ChildC…

二分查找——OJ题(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、点名1、题目讲解2、算法原理3、代码实现 二、搜索旋转排序数组中的最⼩值1、题目讲解2、算…

Unity向Web服务器上传和下载图片

Unity向Web服务器上传和下载图片 如果本片有看不懂的请查看我上篇文章&#xff1a;[Unity与Web服务器Post&#xff0c;Get](https://blog.csdn.net/qq_42194657/article/details/103031573)一、上传和下载图片1.在Unity中创建一个RawImage并在WebManager.cs脚本中添加一个Textu…

石油石化应急三维电子沙盘系统研究分析与业务应用

一、概述 易图讯科技&#xff08;www.3dgis.top&#xff09;以大数据、云计算、虚拟现实、物联网、AI等先进技术为支撑&#xff0c;支持高清卫星影像、DEM高程数据、矢量数据、无人机倾斜摄像、BIM模型、点云、城市白模、等高线、标高点等数据融合和切换&#xff0c;集成油田原…

Unity-Shader-渲染队列

Unity-Shader-渲染队列 渲染简介Unity中的几种渲染队列Background (1000)最早被渲染的物体的队列。Geometry (2000) 不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染&#xff0c;也就是Unity Shader中默认的渲染队列。AlphaTest (2450) 有透明通道&#xff0c;需要进…

巅峰画师Midjourney:新时代的独角兽

介绍 AI绘画领域中&#xff0c;Midjourney处于绝对地位&#xff0c;并且一年时间就登顶。 Midjourney是一家独立的AI研究实验室,探索新的思维媒介,拓展人类的想象力。 它由一个小型的自筹资金团队组成,专注于设计、人类基础设施和AI。 在AI绘画领域,Midjourney取得了非常突出…

SaaS医院信息化云his系统源码带电子病历+LIS系统

一、系统概述 •采用主流成熟技术&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS 应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同&#xff0c;服务可拆分&#xff0c;功能易扩展&#xff1b; •支持多样化灵活配置&#xff0c;提取大量公共参数&am…

P7 RV1126推流项目 —— 写代码前的思路草图

目录 前言 01 项目介绍&#xff1a; 02 项目框图&#xff1a; 03 模块设计思路 3.1.rv1126_ffmpeg_main.cpp(主模块代码): 3.2.rkmedia_assignment_manage.cpp(RKMEDIA 任务管理模块) 3.3. rkmedia_data_process.cpp(RV1126 数据处理模块)&#xff1a; 3.4. rkmedia_…

详解IDEA git 版本回滚

作者简介 目录 1.git分区 2.未commit&#xff0c;进行回滚 3.commit未push&#xff0c;进行回滚 3.1.undo commit 3.2.reset 4.已commit&push&#xff0c;进行回滚 1.git分区 git的版本回滚其实就是回滚不同的分区&#xff0c;所以在聊git回滚之前我们有必要简单了解…

linux(centos)相关

文件架构&#xff1a; 用户组 查看用户组中的用户&#xff01; 用户 切换用户&#xff1a;su 提高用户权限命令&#xff1a;sudo 进程状态命令&#xff1a;top 杀死进程&#xff1a;kill 关机命令:shutdown 重启命令&#xff1a;reboot 时间同步 目录命令 ls pwd rm mv …

git中的smart checkout和force checkout

切换分支时出现了这个问题&#xff1a; 这是因为shiyan01分支修改了代码,但是没有commit, 所以在切换到test分支的时候弹出这个窗口 一、smart checkout(智能签出) 会把shiyan01分支的改动内容带到test分支。合并处理后的内容就变成了test分支的内容,而shiyan01分支的改动会被…

EternalBlue【永恒之蓝】漏洞详解(复现、演示、远程、后门、入侵、防御)内容丰富-深入剖析漏洞原理-漏洞成因-以及报错解决方法-值得收藏!

漏洞背景&#xff1a; 1.何为永恒之蓝&#xff1f; 永恒之蓝&#xff08;Eternal Blue&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子…

yolov7添加FPPI评价指标

学术上目标检测大多用mAP去评价一个模型的好坏&#xff0c;mAP用来作为比较模型的指标是挺好的&#xff0c;不过有个问题就是不够直观&#xff0c;比如mAP0.9到底代表什么呢&#xff1f;平均一个图会误检几个呢&#xff1f;该取什么阈值呢&#xff1f;mAP说明不了&#xff0c;所…

获取android签名

1、安装安卓模拟器&#xff0c;比如MuMu模拟器&#xff1b; 2、打包需要签名的apk&#xff0c;记住包名&#xff0c;比如org.ungleyou.uy,后面签名用得着&#xff1b; 3、下载签名工具&#xff0c;Gen_Signature_Android.apk&#xff1a; http://dlied5.qq.com/msdk/Gen_Sig…

【力扣题解】P101-对称二叉树-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P101-对称二叉树-Java题解&#x1f30f;题目描述&#x1f4a1;题解&#x1f30f;总结…