LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)
题目分析:
- 本题需要实现数字只包含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
LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)的更多相关文章
- LeetCode 75. Sort Colors (颜色分类):三路快排
Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...
- leetcode 75 Sort Colors 计数排序,三路快排
解法一:计数排序:统计0,1,2 的个数 时间复杂度:O(n) 空间复杂度:O(k) k为元素的取值范围, 此题为O(1) class Solution { public: void sortC ...
- [LeetCode] 75. Sort Colors 颜色排序
Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...
- LeetCode 75. Sort Colors(排序颜色)
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- Leetcode 75. Sort Colors
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- [leetcode]75. Sort Colors三色排序
Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...
- LeetCode 75 Sort Colors(颜色排序)
翻译 给定一个包括红色.白色.蓝色这三个颜色对象的数组.对它们进行排序以使同样的颜色变成相邻的,其顺序是红色.白色.蓝色. 在这里,我们将使用数字0.1和2分别来代表红色.白色和蓝色. 原文 Give ...
- leetCode 75.Sort Colors (颜色排序) 解题思路和方法
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- leetcode 75. Sort Colors (荷兰三色旗问题)
Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...
随机推荐
- linux配置 yum 源
使用 yum 命令安装软件包需要一个yum仓库(即yum源),yum通过客户端(yum命令本身即是yum客户端)去连接yum源服务器,CentOS默认yum源为官方的 http://mirrorlis ...
- LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度 LCT+SAM+线段树
Code: #include<bits/stdc++.h> #define maxn 200003 using namespace std; void setIO(string s) { ...
- 两个控件同一行显示bootstrap
<div class="form-group"> <label for="Name" class="form-inline" ...
- Day 22 面向对象编程
面向对象基础 面向对象编程(抽象) 对象:特征和技能的结合体 面向对象编程:一个个对象进行交互 优点:扩展性非常强 缺点:逻辑非常复杂 类与对象 类(类别):一系列具有相同特征和技能的对象 现实世界中 ...
- HDU1029 - Ignatius and the Princess IV【水题】
给你n个数字,请你找出出现至少(n+1)/2次的数字. 输入 本题包含多组数据,请处理到EOF: 每组数据包含两行. 第一行一个数字N(1<=N<=999999) ,保证N为奇数. 第二行 ...
- raize5的修改。
( ( ; Col1: $; Col2: $; Col3: $; Col4: $ ), ( ; Col1: $; Col2: $FA; Col3: $; Col4: $ ), ( ; Col1: $C ...
- 【[Offer收割]编程练习赛10 C】区间价值
[题目链接]:http://hihocoder.com/problemset/problem/1483 [题意] 中文题 [题解] 二分最后的答案; 二分的时候; 对于每一个枚举的值x; 计算小于等于 ...
- Linux中tty是什么(tty1~7)
tty:终端设备的统称. tty一词源于Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘与显示器取代,所 ...
- Hadoop版本:CDH, HDP, MapR
Hadoop版本:CDH, HDP, MapR 学习了:http://dongxicheng.org/mapreduce-nextgen/hadoop-distribution-selection/ ...
- 从OTF字体文件里查找字体名称
for in ? 使用神器vim就好了. . . vim ./AKZIDENZGROTESK-COND.OTF