LeetCode - 75 颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
要求:必须在不使用库的sort函数的情况下解决这个问题。
解决方法:
全部的值由 0、1、2组成,随机散列分布,所以直接写个排序算法也就可以完成相同数值相邻。如果不用排序算法,该怎么做呢?
类似与快速排序,定义两个指针,0都在左指针之前,2都在右指针后,1在两者之间即可。那么怎么实现呢?
1、遍历整个数组,如果当前值是0,那么就将其与左指针处的值交换,然后左指针右移。这样就可以实现左指针左边都是1。
2、如果当前值是2,则将其值与右指针处的值交换,右指针左移,这样就可以实现右指针右边都是2。但是这一步有一点需要注意,就是当我们检测到值是2时,是直接与右指针处的值交换,但右指针处的值也可能等于2,所以此时我们在重新检查一遍交换过去的值是否等于2,所以利用 i--,退回一个下标继续检查。
代码部分:
package Class02;/*** 荷兰三色旗问题* 简单的可以直接用排序,但复杂度过高* 所以用类似与快速排序,设两个指针 A、B 最后实现 0在A左边,2在B右边 即可。*/
public class LeeetCode_75_sortColor {public void sort_color(int[] nums) {int left = 0;int right = nums.length-1;for(int i=0;i<=right;i++){//如果值是0,就将当前值与nums[left]的值交换,然后 left 右移。if(nums[i] == 0){swap(left ++,i,nums);}//如果值是2,将其与nums[right]交换,然后right -- 左移。但有可能原来的right位置的值也为0,故还要判断交换过去的值是否为2,所以i--,继续判断。else if (nums[i] == 2){swap(right--,i--,nums); // 交换的right的值可能还是2,所以i--,继续比较交换后原来位置的值}}}public void swap(int a,int b,int [] nums){int temp = nums[a];nums[a] = nums[b];nums[b] = temp;}
}
参考资料:LeetCode.75.颜色分类_哔哩哔哩_bilibili
LeetCode - 75 颜色分类相关推荐
- leetcode —— 75. 颜色分类
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- LeetCode 75. 颜色分类(Sort Colors)
题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...
- Leetcode 75. 颜色分类 (每日一题 20210817)
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列.此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色.示例 ...
- leetcode 75. 颜色分类(双指针)
给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...
- LeetCode 75 颜色分类
题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色 的元素相邻,并按照红色.白色.蓝色顺序排列.此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...
- Leetcode算法Java全解答--75. 颜色分类
Leetcode算法Java全解答–75. 颜色分类 文章目录 Leetcode算法Java全解答--75. 颜色分类 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...
- 【leetcode】75.颜色分类(多种解法,超详细图文解析)
75. 颜色分类 难度中等 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 ...
- 75. 颜色分类(C++实现)
文章目录 题目 思路--三指针 题目 题目链接:75. 颜色分类) 思路–三指针 其实颜色分类就是对 0 1 2 这三个数字进行排序,但是排序都是有效率之分的,我们希望可以通过一种高效的方法去排序这三 ...
- 2021.1.9每日复习 75.颜色分类(复习快速排序)+ 77.组合(回溯算法)
***75.颜色分类(复习快速排序) class Solution {public void sortColors(int[] nums) {//方法一:冒泡排序// int n = nums.len ...
最新文章
- (转) eclipse项目中.classpath文件详解
- 粒子系统模拟-计算机图形学 豆瓣,基于粒子系统的瀑布模拟与实现
- 数学之美 系列十三 信息指纹及其应用
- makefile 基本总结
- KUKA 声明变量时的几点注意
- 2020年“1024”,程序员日
- SQL注入问题及预防方法
- android 手机工具箱,Android工具箱下载
- 产品部门四大角色——PM/PD/UE/UI
- EntityFramework进阶——继承
- Ubuntu解决sudo source command not found错误
- Spring MVC Formatter(数据格式化)详解
- python executemany_Python MySQLdb executemany
- 【Java程序设计】多线程基础
- SVN+MAVEN项目打包
- Lync 小技巧-52-Lync 2013-不加域-客户端-2-导入-证书-信任链
- c++ 跳转到上级目录_基于VSCode和CMake进行C/C++开发第五讲IDEVSCode
- 百度AI攻略:iOCR自定义模板功能
- 2、基因树 与物种树的关系及建树
- Hive记录-Hive常用命令操作
热门文章
- 奋斗的小孩系列 FPGA学习altera系列: 第十篇 按键控制LED
- 给电动车装遥控器来寻车的记录
- 使用unzip解压jar包和jar包的打包方法
- 传智博客学习之javaweb学习感受
- freeRTOS+littlevgl的综合demo
- python对平面设计帮助_23个技巧帮助成为一名优秀的平面设计师
- 【矩阵快速幂】233 Matrix HDU - 5015
- zcmu——-4921 字符串连接(不调用任何c的库函数实现字符串拼接)
- 猿大师VLC播放程序在Chrome浏览器中同时播放25路RTSP摄像头视频流效果
- 今日报错系列:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加 “#include “stdafx.h“”?