给定一个包含红色、白色和蓝色、共 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 颜色分类相关推荐

  1. leetcode —— 75. 颜色分类

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  2. LeetCode 75. 颜色分类(Sort Colors)

    题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...

  3. Leetcode 75. 颜色分类 (每日一题 20210817)

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列.此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色.示例 ...

  4. leetcode 75. 颜色分类(双指针)

    给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和蓝色. ...

  5. LeetCode 75 颜色分类

    题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色 的元素相邻,并按照红色.白色.蓝色顺序排列.此题中,我们使用整数 0. 1 和 2 分别表示红色.白色 ...

  6. Leetcode算法Java全解答--75. 颜色分类

    Leetcode算法Java全解答–75. 颜色分类 文章目录 Leetcode算法Java全解答--75. 颜色分类 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 题目 给定 ...

  7. 【leetcode】75.颜色分类(多种解法,超详细图文解析)

    75. 颜色分类 难度中等 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 ...

  8. 75. 颜色分类(C++实现)

    文章目录 题目 思路--三指针 题目 题目链接:75. 颜色分类) 思路–三指针 其实颜色分类就是对 0 1 2 这三个数字进行排序,但是排序都是有效率之分的,我们希望可以通过一种高效的方法去排序这三 ...

  9. 2021.1.9每日复习 75.颜色分类(复习快速排序)+ 77.组合(回溯算法)

    ***75.颜色分类(复习快速排序) class Solution {public void sortColors(int[] nums) {//方法一:冒泡排序// int n = nums.len ...

最新文章

  1. (转) eclipse项目中.classpath文件详解
  2. 粒子系统模拟-计算机图形学 豆瓣,基于粒子系统的瀑布模拟与实现
  3. 数学之美 系列十三 信息指纹及其应用
  4. makefile 基本总结
  5. KUKA 声明变量时的几点注意
  6. 2020年“1024”,程序员日
  7. SQL注入问题及预防方法
  8. android 手机工具箱,Android工具箱下载
  9. 产品部门四大角色——PM/PD/UE/UI
  10. EntityFramework进阶——继承
  11. Ubuntu解决sudo source command not found错误
  12. Spring MVC Formatter(数据格式化)详解
  13. python executemany_Python MySQLdb executemany
  14. 【Java程序设计】多线程基础
  15. SVN+MAVEN项目打包
  16. Lync 小技巧-52-Lync 2013-不加域-客户端-2-导入-证书-信任链
  17. c++ 跳转到上级目录_基于VSCode和CMake进行C/C++开发第五讲IDEVSCode
  18. 百度AI攻略:iOCR自定义模板功能
  19. 2、基因树 与物种树的关系及建树
  20. Hive记录-Hive常用命令操作

热门文章

  1. 奋斗的小孩系列 FPGA学习altera系列: 第十篇 按键控制LED
  2. 给电动车装遥控器来寻车的记录
  3. 使用unzip解压jar包和jar包的打包方法
  4. 传智博客学习之javaweb学习感受
  5. freeRTOS+littlevgl的综合demo
  6. python对平面设计帮助_23个技巧帮助成为一名优秀的平面设计师
  7. 【矩阵快速幂】233 Matrix HDU - 5015
  8. zcmu——-4921 字符串连接(不调用任何c的库函数实现字符串拼接)
  9. 猿大师VLC播放程序在Chrome浏览器中同时播放25路RTSP摄像头视频流效果
  10. 今日报错系列:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加 “#include “stdafx.h“”?