98、技巧-颜色分类

server/2024/9/20 7:36:39/ 标签: 数据结构, 算法, 排序算法

思路

这道题的思路是什么,首先典型荷兰国旗问题:

该问题的关键在于我们要将所有的0放到数组的前部,所有的1放在中间,所有的2放在后部。这可以通过使用两个指针,一个指向数组开头的“0”的最后一个位置,另一个指向数组结尾的“2”的第一个位置,以及一个用来遍历数组的当前指针来实现。

  1. low指针:在数组的开始位置,它的前面(不包括low自身)是排好的0。
  2. high指针:在数组的结束位置,它的后面(不包括high自身)是排好的2。
  3. current指针:用来遍历数组,探索未知的部分。

遍历过程中:

  • 如果遇到0,则将其与low指针指向的位置交换,然后移动low指针和current指针。
  • 如果遇到1,则不做交换,只移动current指针。
  • 如果遇到2,则将其与high指针指向的位置交换,然后仅移动high指针。

由于我们始终将2换到数组的尾部,这意味着交换到前面的元素(未经current检查的元素)需要再次检查,因此当current <= high时,继续遍历。

代码如下:

public void sortColors(int[] nums) {int low = 0, high = nums.length - 1, current = 0;int temp;while (current <= high) {switch (nums[current]) {case 0:// 交换当前元素和low指向的元素temp = nums[current];nums[current] = nums[low];nums[low] = temp;low++;current++;break;case 1:// 不做交换,只移动currentcurrent++;break;case 2:// 交换当前元素和high指向的元素temp = nums[current];nums[current] = nums[high];nums[high] = temp;high--;break;}}
}


http://www.ppmy.cn/server/39462.html

相关文章

mac安装禅道

前提已安装&#xff1a;phpapacheMySQL mac安装 php7.1/apache-CSDN博客 安装MySQL 一、禅道下载 安装官方文档 源码包下载地址&#xff1a;禅道下载 - 禅道开源项目管理软件 。 1. 解压禅道源码包 2. 将解压后的文件复制到Apache访问目录下 &#xff08;默认路径为 /Libra…

AI图书推荐:给自媒体创作者的ChatGPT使用指南

你是否厌倦了花费数小时盯着空白屏幕&#xff0c;努力为你的内容想出新鲜点子&#xff1f;想要将你的写作提升到下一个水平&#xff1f;有了ChatGPT&#xff0c;你可以告别写作障碍、无休止的修订和浪费的时间。 在这本全面的指南中&#xff0c;你将学到关于ChatGPT你需要知道…

Windows查找JDK的安装路径

如果很久之前安装了JDK&#xff0c;或者在别人的电脑上&#xff0c;想要快速指导JDK 的安装路径&#xff0c;可以通过啥方式指导JDK的安装路径是在哪里呢&#xff1f; 一、确认是否安装了JDK 首先我们打开命令行&#xff0c;如果输入 java -version 如果显示这种&#xff0c;…

豆芽机置入语音芯片WTN6040-8S:开启智能生活新篇章,让豆芽制作更便捷有趣

豆芽机的开发背景&#xff1a; 豆芽作为一种营养丰富、味道鲜美的食品&#xff0c;深受广大消费者的喜爱。然而&#xff0c;传统的豆芽生产过程繁琐&#xff0c;需要耗费大量的时间和人力&#xff0c;且存在生产效率低、质量不稳定等问题。随着人们生活节奏的加快和对健康饮食的…

【软考高项】三十八、风险管理7个过程

一、规划风险管理 1、定义、作用 定义&#xff1a;定义如何实施项目风险管理活动的过程作用&#xff1a;确保风险管理的水平、方法和可见度与项目风险程度相匹配&#xff0c;与对组织和其他干系人的重要程度相匹配 2、输入 项目管理计划 项目章程 项目文件 干系人登记册…

预编码算法介绍及优缺点

预编码算法介绍 介绍优缺点 介绍 预编码算法是一种用于无线通信系统中的技术&#xff0c;其基本思想是通过矩阵运算将经过调制的符号信息流和信道状态信息进行有机结合&#xff0c;变换成适合当前信道的数据流&#xff0c;再通过天线发送出去。这种技术的主要目的是在发送端对…

【栈】Leetcode 验证栈序列

题目讲解 946. 验证栈序列 算法讲解 在这里就只需要模拟一下这个栈的出栈顺序即可&#xff1a;使用一个stack&#xff0c;每次让pushed里面的元素入栈&#xff0c;如果当前栈顶的元素等于poped容器中的当前元素&#xff0c;因此就需要让栈顶元素出栈&#xff0c;poped的遍历…

设计模式——外观模式(Facade)

外观模式&#xff08;Facade Pattern&#xff09; 是一种结构型设计模式&#xff0c;它为一个子系统中的一组接口提供一个统一的高层接口&#xff0c;使得子系统更加容易使用。这种类型的设计模式属于结构型模式&#xff0c;它向客户端提供了一个接口&#xff0c;隐藏了子系统的…

论文笔记:DeepMove: Predicting Human Mobility with Attentional Recurrent Networks

WWW 2018 1 Intro 根据对百万级用户群的研究&#xff0c;93%的人类移动是可预测的。 早期的mobility预测方法大多基于模式的。 首先从轨迹中发现预定义的移动模式(顺序模式、周期模式)然后基于这些提取的模式预测未来位置。最近的发展转向基于模型的方法进行流动性预测。 利用…

变量的细节

如何打印不同类型的整数常量 相似于我们需要去声明类型 public class Var {public static void main(String[] args) {// 1就是int类型常量System.out.println(1);// 120后面加一个L(l)表示他是一个long型的整数System.out.println(120l);} }如何打印不同类型的浮点数常量 与…

超像素分割【代码】

超像素分割是一种图像处理技术&#xff0c;旨在将图像分割成具有语义上一致的区域&#xff0c;这些区域称为超像素。与传统的像素级分割相比&#xff0c;超像素分割将图像划分为更大的、形状更加规整的区域&#xff0c;有助于降低数据维度、简化图像分析、提高计算效率&#xf…

码题杯 世界警察 思想:双指针

https://www.matiji.net/exam/brushquestion/4/4446/16A92C42378232DEB56179D9C70DC45C 双指针 思路是这样的&#xff0c;首先r指针向右走&#xff0c;如果r指针遇到了和l指针一样的&#xff0c;那么l指针就&#xff0c;一直加到r指针的位置&#xff0c;此时a[l]a[r]&#xff0…

金融业办公信息系统基本要求

金融业办公信息系统基本要求 1 范围 本文件规定了金融行业办公信息系统基本要求&#xff0c;主要包含总体设计原则、功能类要求和非功能类要 求。 本文件适用于指导金融机构办公信息系统的规划、建设、运行和管理。 2 规范性引用文件 下列文件中的内容通过文中的规范性引用而…

leetcode-缺失的第一个正整数-96

题目要求 思路 1.这里的题目要求刚好符合map和unordered_map 2.创建一个对应map把元素添加进去&#xff0c;用map.find(res)进行查找&#xff0c;如果存在返回指向该元素的迭代器&#xff0c;否则返回map::end()。 代码实现 class Solution { public:int minNumberDisappeare…

什么是LangChain?如何学习?

LangChain是什么&#xff1f; LangChain是一个开源框架&#xff0c;它允许开发人员构建和部署由大型语言模型&#xff08;LLMs&#xff09;驱动的应用程序。这个框架提供了一套丰富的工具和抽象&#xff0c;用以增强模型生成的信息的定制性、准确性和相关性。LangChain的应用可…

【QT教程】QT6命令行工具开发 QT命令行

QT6命令行工具开发 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免…

全新时代的降临——比亚迪,助力未来出行

近日&#xff0c;世界舞台中央聚焦&#xff0c;比亚迪登上欧洲顶级赛事赞助席位&#xff0c;让全球见证中国新能源汽车传奇崛起&#xff01;作为新能源领袖品牌&#xff0c;比亚迪现已累计销售突破730万辆&#xff0c;全球每售出五辆新能源汽车&#xff0c;便有一辆来自比亚迪。…

Babylon.js 7.0开发入门教程

Babylon.js 是一个功能强大的开源 3D 引擎&#xff0c;能够使用 JavaScript 渲染交互式 3D 和 2D 图形。它是为 Web 甚至 VR 创建游戏、演示、可视化和其他 3D 应用程序的绝佳选择。Babylon.js最新版本是7.0。 Babylon.js 是免费、开源和跨平台的&#xff0c;是 Unity 和 Unre…

buuctf-misc题目练习三

荷兰宽带数据泄露 BIN 文件&#xff0c;也称为二进制文件&#xff0c;是一种压缩文件格式&#xff0c;可以 包含图像和视频等信息 , 并被许多应用程序用于各种目的。 RouterPassView是一个找回路由器密码的工具。 大多数现代路由器允许备份到一个文件路由器的配置&#xff0c…

OpenCV 入门(四)—— 车牌号识别

OpenCV 入门系列&#xff1a; OpenCV 入门&#xff08;一&#xff09;—— OpenCV 基础 OpenCV 入门&#xff08;二&#xff09;—— 车牌定位 OpenCV 入门&#xff08;三&#xff09;—— 车牌筛选 OpenCV 入门&#xff08;四&#xff09;—— 车牌号识别 OpenCV 入门&#xf…