LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)
2024-08-24 11:06:06
题目分析:
- 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历。
- 由于只用把数字隔离开,很容易想到快排的分割操作partition。
- 将三类数字隔离开,也就是模拟三路快排的分割操作了。
解题思路
- 快排是选取哨兵p,将一段数组分成<p,=p,>p三类,并按这个顺序隔离开。
- 本题类似,哨兵为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
最新文章
- angularjs ocLazyLoad分步加载js文件,angularjs ocLazyLoad按需加载js
- 嵌入式Linux驱动开发日记
- 51nod 1183 编辑距离(dp)
- 无任何网络提供程序接受指定的网络路径(系统服务里没有workstation服务)
- 我是一只IT小小鸟
- 利用PHPRPC以及SOAP分别实现PHP的Webserver功能
- 百度2015校招二面coding面试题
- Linux搭建SVN 服务器(转)
- AngularJS 不得不了解的服务 $compile 用于动态显示html内容
- centos下美团sql优化工具SQLAdvisor的安装
- sqoop: mysql to hive
- 【43】Activity的几种LaunchMode及使用场景
- Linux文件系统及常用命令
- js单元测试
- Google开发者大会:你不得不知的Tensorflow小技巧
- python系列-2 正则表达式资料
- tchart...
- spark 2.0.0集群安装与hive on spark配置
- BZOJ4999: This Problem Is Too Simple!树链剖分+动态开点线段树
- require.js text 插件使用
热门文章
- CF482D Random Function and Tree 树形DP + 思维 + 神题
- MATLAB图形界面设计(上)
- [luogu1073 Noip2009] 最优贸易 (dp || SPFA+分层图)
- 磁盘及文件系统管理(以及btrfs)
- 学习EXTJS6(8)基本功能-表单的基础表字段Ext.form.field.Basic
- ZOJ 3362 Beer Problem
- 如何实现网卡bond
- mongodb--分片架构【待填的坑】
- spring boot使用外部tomcat部署
- 【iOS开发系列】九宫格布局