【技巧】Leetcode 75. 颜色分类【中等】

embedded/2024/9/20 2:19:00/ 标签: leetcode, 算法, java

颜色分类

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

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

  • 必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]

解题思路

这个问题可以使用荷兰国旗问题的思想来解决,

  • 1、通过三个指针来遍历数组,将数组划分为红、白、蓝三个部分。
  • 2、low指针用于标记红色区域的末尾,high指针用于标记蓝色区域的开头,而current指针则用于遍历数组。
  • 3、通过交换元素的位置,最终可以将数组中的元素按照红色、白色、蓝色的顺序排列。
  • 4、在遍历的过程中,
  •  如果当前元素是0,则与红色区域的末尾交换;
    
  •  如果是1,则直接继续遍历;
    
  •  如果是2,则与蓝色区域的开头交换。
    
  • 5、遍历完数组后,就可以得到排序好的数组。

核心思想:通过交换使得红、蓝颜色排序好,中间剩下的全是白色。

Java实现

java">public class SortColors {public void sortColors(int[] nums) {int low = 0;//low指针用于标记红色区域的末尾int high = nums.length - 1;//high指针用于标记蓝色区域的开头int current = 0;while (current <= high) {if (nums[current] == 0) {swap(nums, current, low);current++;low++;} else if (nums[current] == 1) {current++;} else if (nums[current] == 2) {swap(nums, current, high);high--;}}}private void swap(int[] nums, int i, int j) {int temp = nums[i];nums[i] = nums[j];nums[j] = temp;}public static void main(String[] args) {SortColors sorter = new SortColors();int[] nums = {1, 2, 0, 2, 1, 1, 0};sorter.sortColors(nums);for (int num : nums) {System.out.print(num + " ");}}
}

时间空间复杂度

  • 时间复杂度:O(n),其中n为数组nums的长度。因为只需遍历一次数组。

  • 空间复杂度:O(1)。


http://www.ppmy.cn/embedded/10941.html

相关文章

Linux下SPI设备驱动实验:测试读取ICM20608设备中数据是否正常

一. 简介 前面文章实现了 SPI设备的读写功能&#xff0c;也对ICM20608设备中&#xff08;即SPI设备&#xff09;寄存器里的数据进行了读取。文章如下&#xff1a; Linux下SPI设备驱动实验&#xff1a;读取ICM20608设备的数据-CSDN博客 本文对驱动功能进行测试&#xff0c;即…

k8s的服务Service暴露应用

k8s的服务Service暴露应用 Kubernetes&#xff08;k8s&#xff09;是一个开源的容器编排系统&#xff0c;用于自动化应用部署、扩展和管理。在k8s中&#xff0c;Service是管理Pod访问的关键组件&#xff0c;它允许你定义如何访问运行在集群中的Pod。本文将详细介绍Service的概…

zustand关于状态变化,是写在内部,还是外部

在使用Zustand时&#xff0c;通常建议将逻辑写在Zustand内部。Zustand是一个状态管理库&#xff0c;它提供了一种简单且强大的方式来管理状态&#xff0c;并且它的设计初衷就是为了让状态管理更加简洁和直观。 在Zustand内部定义状态和操作函数&#xff0c;并通过useStore hoo…

蓝桥杯第17169题——兽之泪II

问题描述 在蓝桥王国&#xff0c;流传着一个古老的传说&#xff1a;在怪兽谷&#xff0c;有一笔由神圣骑士留下的宝藏。 小蓝是一位年轻而勇敢的冒险家&#xff0c;他决定去寻找宝藏。根据远古卷轴的提示&#xff0c;如果要找到宝藏&#xff0c;那么需要集齐 n 滴兽之泪&#…

外呼系统呼叫系统有什么用又有什么优势?

现在外呼系统的应用越来越广泛了&#xff0c;是很多企业进行电话营销的首选&#xff0c;那在电销行业中&#xff0c;电销外呼系统有什么用&#xff1f;外呼系统有什么优势&#xff1f; 一、电销外呼系统有什么用 伴随着企业客户越来越多&#xff0c;对于回访客户方面&#xff…

Vue.js(自定义指令)

自定义指令 Vue.js中&#xff0c;除了预定义的13个指令外&#xff0c;还允许用户自定义扩展指令。创建自定义指令 inserted( el ){ //当元素被加载到DOM树时触发 .... el 为当前一个写有v-指令的DOM元素对象 函数中&#xff0c;执行原生的DOM API }})- 强调: ‘指令名’不用加…

Flink面试(1)

1.Flink 的并行度的怎么设置的&#xff1f; Flink设置并行度的几种方式 1.代码中设置setParallelism() 全局设置&#xff1a; 1 env.setParallelism(3);  算子设置&#xff08;部分设置&#xff09;&#xff1a; 1 sum(1).setParallelism(3) 2.客户端CLI设置&#xff0…

HTML使用jQuery实现两个点击按钮,分别控制改文本字体颜色和字体大小

jQuery 简介 jQuery 是一个广泛使用的 JavaScript 库&#xff0c;旨在简化对 HTML 文档的操作、事件处理、动画效果和 AJAX 等操作。 案例源码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name&q…

Python网络爬虫项目开发实战:怎么处理下载缓存

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python网络爬虫项目开发实战_下载缓存_编程案例解析实例详解课程教程.pdf 一、下载缓存的简介 在网络爬虫项目开发中,下载缓存是一个重要的优化手段,…

使用甘特图来做时间管理

在这个追求效率的时代,掌握高超的时间管理技能几乎等同于掌控了成功。事实上,时间就是金钱,更是稀缺资源。那么,如何高效地规划和利用时间呢?甘特图应该是您的必备武器之一。 甘特图(Gantt chart)名字虽然有些陌生,但它的使用范围确实广泛。无论是全职妈妈安排家务,还是上市公…

LLAMA 3的测试之旅:在GPT-4的阴影下前行

Meta终于发布了他们长期期待的LLAMA 3模型&#xff0c;这是一个开源模型&#xff0c;实际上提供了一系列新的功能&#xff0c;使得模型在回答问题时表现得更好。这对AI社区来说是一个真正的里程碑事件。 Meta正在发布新版本的Meta AI&#xff0c;这是一种可以在他们的应用程序和…

Nginx第1篇-安装和简单配置

Nginx可以做什么 可以做静态HTTP服务器做负载均衡做正向代理做反向代理 正向代理和反向代理 正向代理&#xff1a; 是一个位于客户端和目标服务器之间的服务器(代理服务器)&#xff0c;为了从目标服务器取得内容&#xff0c;客户端向代理服务器发送一个请求并指定目标&…

管理情绪方法【你的观点“稳定”你的情绪】

我们的理想是什么&#xff1f; 不断提升自己的层次&#xff0c;每个人的满意条件是不一样 自己对自己负责、情绪靠自己去调整 不敢认错&#xff0c;不是不认错、嘴巴推&#xff0c;内心要承认 人最可靠的是改变自己&#xff0c;不是改变别人 一切都是不一定的&#xff0c;即相…

PVE grub resue错误修复 lvmid BUG

服务器断电后启动不起来&#xff0c;显示grub resue 找了半天没有找到修复方法。看官方文档有一处Recovering from grub “disk not found” error when booting from LVM 极为类似。https://pve.proxmox.com/wiki/Recover_From_Grub_Failure 下面是处理过程。 使用PVE 6.4启…

基于SSM+Jsp+Mysql的电器网上订购系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

Java注解相关

Java注解相关 TableId注解RequiredArgsConstructor TableId注解 需要 import com.baomidou.mybatisplus.annotation.TableId; <!-- 各个依赖的版本号 --><properties><spring-boot.version>3.2.5</spring-boot.version><java.version>17</j…

关于pdf.js中文本坐标尺寸的使用

一个电子教材项目中有这样一个需求&#xff1a; 用户向网站上传一个PDF书籍后&#xff0c;网站可以对PDF书籍进行解析&#xff0c;并支持用户对PDF书籍的每一页做一些操作&#xff0c;比如&#xff1a;为英语课本的单词和句子添加音频热区。因为热区数量很多&#xff0c;所以&a…

界面组件库DevExpress Office File API(WinForms WPF)v24.1新功能预览

本文描述了界面组件库DevExpress的Office File API&#xff08;WinForms & WPF&#xff09;和受Office启发的控件在v24.1中发布的一些功能&#xff0c;并详细介绍了我们当前的抢先体验预览版本v24.1中的内容。 DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满…

猴子摘桃问题(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int sum 1;int i 0;//运算&#xff1b;for (i 1; i < 10; i){//运算&#xff1b;sum …

【Linux开发 第十三篇】shell编程

shell编程 shell编程shell脚本函数 数据库备份 shell编程 对于后端开发&#xff0c;掌握shell编程是非常有必要的&#xff0c;可以对服务器进行维护&#xff0c;同时也可以对数据库进行操作 shell是一个命令解释器&#xff0c;它为用户提供了一个向Linux内核发送请求来运行的界…