题目分析:

  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]=0
while left < mid:
if nums[left] == 0:
left += 1
elif nums[left] == 1:
mid -= 1
temp = nums[left]
nums[left] = nums[mid]
nums[mid] = temp
elif nums[left] == 2:
right -= 1
temp = nums[left]
nums[left] = nums[right]
nums[right] = temp
# 处理出现了2,但是还未出现1的情况
if mid > right:
mid = right

最新文章

  1. angularjs ocLazyLoad分步加载js文件,angularjs ocLazyLoad按需加载js
  2. 嵌入式Linux驱动开发日记
  3. 51nod 1183 编辑距离(dp)
  4. 无任何网络提供程序接受指定的网络路径(系统服务里没有workstation服务)
  5. 我是一只IT小小鸟
  6. 利用PHPRPC以及SOAP分别实现PHP的Webserver功能
  7. 百度2015校招二面coding面试题
  8. Linux搭建SVN 服务器(转)
  9. AngularJS 不得不了解的服务 $compile 用于动态显示html内容
  10. centos下美团sql优化工具SQLAdvisor的安装
  11. sqoop: mysql to hive
  12. 【43】Activity的几种LaunchMode及使用场景
  13. Linux文件系统及常用命令
  14. js单元测试
  15. Google开发者大会:你不得不知的Tensorflow小技巧
  16. python系列-2 正则表达式资料
  17. tchart...
  18. spark 2.0.0集群安装与hive on spark配置
  19. BZOJ4999: This Problem Is Too Simple!树链剖分+动态开点线段树
  20. require.js text 插件使用

热门文章

  1. CF482D Random Function and Tree 树形DP + 思维 + 神题
  2. MATLAB图形界面设计(上)
  3. [luogu1073 Noip2009] 最优贸易 (dp || SPFA+分层图)
  4. 磁盘及文件系统管理(以及btrfs)
  5. 学习EXTJS6(8)基本功能-表单的基础表字段Ext.form.field.Basic
  6. ZOJ 3362 Beer Problem
  7. 如何实现网卡bond
  8. mongodb--分片架构【待填的坑】
  9. spring boot使用外部tomcat部署
  10. 【iOS开发系列】九宫格布局