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

news/2024/10/17 1:28:04/

链接:力扣(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 时就不存在未处理的数据了,处理完毕,划分结束


http://www.ppmy.cn/news/1283306.html

相关文章

Java面试题66-75

66、Collection 和 Collections的区别。 Collection是集合类的上级接口&#xff0c;继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类&#xff0c;他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 67、Set里的元素是不能重复的…

如何避免卡尔曼滤波器的发散? Q P R参数怎么调?

文章目录 1.什么是发散2.发散的原因3.解决方法4.参数意义及调试方法5.工程经验(1)抑制P矩阵发散(2)抑制K矩阵发散1.什么是发散 当滤波的实际误差远远超过滤波误差的允许范围,甚至于趋向无穷大,使得滤波器推动作用,这种现象叫做滤波的发散。 2.发散的原因 (1)系统的…

vivado 快速到慢速时钟之间的多循环

快速到慢速时钟之间的多循环 在下面的场景中&#xff0c;启动时钟CLK1是快速时钟&#xff0c;捕获时钟CLK2是慢时钟。如下图所示。 在下一示例中&#xff0c;启动时钟CLK1是快速时钟。捕获时钟CLK2较慢时钟假设CLK1是CLK2的频率的三&#xff08;3&#xff09;倍。如下图所示。…

电商数据分析-03-电商数据采集

参考 最最最全数据仓库建设指南&#xff0c;速速收藏&#xff01;&#xff01; 第1章 数据仓库概念 数据仓库规划 1.1 数仓搭建 我们这里所说的数据仓库&#xff0c;是基于大数据体系的&#xff0c;里面包含标签类目&#xff0c;区别于传统的数据仓库。下面我们来将这张图分解…

蓝桥杯嵌入式PWM

1.PA6&#xff0c;PA7分别输出100Hz和200Hz的PWM

uni-app 命令行创建

1. 首先创建项目&#xff0c;命令如下: npx degit dcloudio/uni-preset-vue#vite-ts uni-app-demo如果出现报错&#xff0c;如下图. 大概率就是没有目录C:\Users\Administrator\AppData\Roaming\npm 解决办法&#xff1a; 创建目录 C:\Users\Administrator\AppData\Roaming\n…

python降低图像的空间分辨率——冈萨雷斯数字图像处理

原理&#xff1a; 降低图像的空间分辨率意味着减少图像中可见的细节&#xff0c;使图像变得模糊或粗糙。这可以通过减少图像的像素数量或改变像素的排列来实现。以下是一些降低图像空间分辨率的常见原理和方法&#xff1a; 下采样&#xff08;Subsampling&#xff09;&#xf…

sheng的学习笔记-【中】【吴恩达课后测验】Course 4 -卷积神经网络 - 第四周测验

课程4_第4周_测验题 目录 第一题 1.面部验证只需要将新图片与1个人的面部进行比较&#xff0c;而面部识别则需要将新图片与K个人的面部进行比较。 A. 【  】正确 B. 【  】错误 答案&#xff1a; A.【 √ 】正确 第二题 2.在人脸验证中函数d(img1,img2)起什么作用&a…