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 ...
随机推荐
- 利用Xpath和jQuery进行元素定位示例
利用Selenium在做前端UI自动化的时候,在元素定位方面主要使用了XPATH和jQuery两种方法.XPATH作为主要定位手段,jQuery作为补充定位手段.因为在通过XPATH进行定位的时候,S ...
- android自定义dialog布局
dialog使用系统自带的有时候不是很美观,就想要自己来设计一个dialog界面,以下就是可以设计的dialog界面: public class CustomDialog extends Dialog ...
- html第三节课
表单 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- (C/C++学习)1.C++中vector的使用
说明:vector是C++中一个非常方便的容器类,它用于存放类型相同的元素,利用成员函数及相关函数可以方便的对元素进行增加或删除,排序或逆序等等,下面将对这些功能一一叙述. 一.vector的第一种用 ...
- 七夕心形demo
from turtle import * pensize(1) pencolor('red') fillcolor('pink') speed(5) up() goto(-30, 100) down( ...
- 08.Web服务器-3.Web静态服务器
1.显示固定的页面 from socket import * from multiprocessing import * import os def handleClient(clientSocket ...
- .net 单元测试
都说测试驱动开发,但是想写好单元测试其实不容易,不是因为测试用例难以构造,而是因为很多时候方法非常复杂 其中部分测试想要完成就十分费力,其中让人崩溃的地方主要如下: 实例私有函数 实例静态私有函数 十 ...
- List集合中把其中一个元素 调整到集合的第一位
要求:现在想把集合中的某个元素,放到该集合的第一个位置,但是其他元素的顺序不需要管. 方法:需要遍历集合,找到这个元素在集合中的位置,然后使用Collections.swap(list,o,i) (O ...
- Linux磁盘分区方案(转)
硬盘分区的各个分区的意义 尽管可以根据我们已经提到的分区原则,Linux装在一个单一的大分区中,但更好的主意是将它分开.综合了单一分区的简单性和多分区的灵活性,我们推荐以下配置.请注意:如果你想安装L ...
- matplotlib的cmap
今天又看到了这样的代码: plt.imshow(X_train[0], cmap=plt.get_cmap('PuBuGn_r')) #plt.imshow(X_train[0], cmap=plt. ...