LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)

题目分析:

  1. 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历。
  2. 由于只用把数字隔离开,很容易想到快排的分割操作partition。
  3. 将三类数字隔离开,也就是模拟三路快排了。

解题思路

  1. 快排是选取哨兵p,将一段数组分成<p,=p,>p三类,并按这个顺序隔离开。
  2. 本题类似,哨兵为1,将一段数组分成0,1,2,即<1,=1,>1,并按这个顺序隔离开。

代码如下

class Solution:    def sortColors(self, nums: List[int]) -> None:left = 0#mid表示目前第一个1的位置,在len(nums)表示1还未出现#加入1的操作,只用将mid-1,然后与left交换mid = len(nums)#right表示目前第一个2的位置,在len(nums)表示第一个2还未出现#加入2的操作,只用将right-1,然后与left交换right = len(nums)#left是一个游标,不断交换,直到nums[left]=0while left < mid:if nums[left] == 0:left += 1elif nums[left] == 1:mid -= 1temp = nums[left]nums[left] = nums[mid]nums[mid] = tempelif nums[left] == 2:right -= 1temp = nums[left]nums[left] = nums[right]nums[right] = temp# 处理出现了2,但是还未出现1的情况if mid > right:mid = right

LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)相关推荐

  1. 【排序】LeetCode 75. Sort Colors

    LeetCode 75. Sort Colors Solution1: 参考自:<leetcode-cpp 答案> 由于0,1,2非常紧凑,首先想到计数排序(counting sort), ...

  2. [LeetCode]75.Sort Colors

    [题目连接] 75.Sort Colors [题目] Given an array with n objects colored red, white or blue, sort them so th ...

  3. leetcode 75. Sort Colors | 75. 颜色分类(荷兰国旗问题,快速排序)

    题目 https://leetcode.com/problems/sort-colors/ 题解 快速排序3.0(随机快排+荷兰国旗技巧优化) 在arr[L-R]范围上,进行快速排序的过程: 1)在这 ...

  4. LeetCode 75 Sort Colors(颜色排序)

    翻译 给定一个包括红色.白色.蓝色这三个颜色对象的数组.对它们进行排序以使同样的颜色变成相邻的,其顺序是红色.白色.蓝色.在这里,我们将使用数字0.1和2分别来代表红色.白色和蓝色. 原文 Given ...

  5. LeetCode 75. Sort Colors

    题目: Given an array with n objects colored red, white or blue, sort them so that objects of the same ...

  6. 个人记录-LeetCode 75. Sort Colors

    问题: Given an array with n objects colored red, white or blue, sort them so that objects of the same ...

  7. 75. Sort Colors - LeetCode

    Question 75. Sort Colors Solution 题目大意: 给一个数组排序,这个数组只有0,1,2三个元素,要求只遍历一遍 思路: 记两个索引,lowIdx初始值为0,highId ...

  8. Leetcode 075 Sort Colors

    题目连接:Leetcode 075 Sort Colors 解题思路:从左向右遍历,同时维护两个指针r和b,0~r位置上的元素为0,b~n-1位置上的为2.在遍历过程中,碰到0,放到r的位置:碰到2, ...

  9. 归并排序、快速排序、二路快排、三路快排python实现

    源代码: https://github.com/lzneu/Algrithm_python O(n*logn)级别的排序: |-归并排序     分成log(n)个层级 每个层级进行O(n)排序   ...

最新文章

  1. 转: 浅析Fusion-IO和Intel SSD
  2. python去掉数字最后的零_python – 如何消除额外的负号,将数字四舍五入为零时,以numpy为单位?...
  3. HTML5 进阶系列:拖放 API 实现拖放排序
  4. (转)Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询
  5. 终极JPA查询和技巧列表–第2部分
  6. 前端路由实现原理(history)
  7. shell获取命令行结果指定列(指定列结果)
  8. linux nfs4 超时,Linux文件服务器NFS详解【4】
  9. Algorithm:贪心策略之区间覆盖问题
  10. ArcGIS 9在WIN XP 和 WIN 2003 系统下安装部分动态库不能注册
  11. Operation和OperationQueue详解
  12. java---金额中文大小写实时转换小程序
  13. uniapp-登录界面风格-001
  14. 8种编程语言毕业设计参考文献大全(java,jsp,mysql,c#,asp.net,sqlserver,andorid,php)
  15. 利用nginx实现内网地图瓦片代理
  16. HTML5 progress进度条详解
  17. PNAS | 朱永官院士团队单细胞拉曼结合靶向宏基因组揭示土壤活性抗生素耐药组...
  18. Pytorch练习--绘制Loss曲线
  19. 【镜像取证篇】常见镜像文件类型
  20. PageBarHelper(数字页码条帮助类)

热门文章

  1. unet脑肿瘤分割_2D UNet3+ Pytorch实现 脑肿瘤分割
  2. 参数校验放在controller还是service_@Validated校验的实践
  3. 7.定义一个有80个元素的字符数组,从键盘输入一串字符,将其中的大写字母转换为小写字母,而将原来为小写的字母转换为大写字母,其他字符不变。
  4. 电脑编程用户注册界面java_用JSP/Servlet开发简单的用户注册系统
  5. vue为p标签_通过vue.js几个基本操作,理解一下什么是插槽「606」
  6. 课堂派派典型用户和场景
  7. spring第二冲刺阶段第九天
  8. C语言不用循环不用递归打印0-999的小程序,你看懂了吗?
  9. 市场定位和硬件设计的错误-浅谈GM8126的封装
  10. PHP高级编程之消息队列