LeetCode Sort Colors
来源:互联网 发布:淘宝接单app软件 编辑:程序博客网 时间:2024/06/05 13:27
LeetCode解题之Sort Colors
原题
给出一个由红、白、蓝三种颜色组成的数组,把相同颜色的元素放到一起,并整体按照红、白、蓝的顺序。用0表示红色,1表示白色,2表示蓝色。这题也称为荷兰国旗问题。
注意点:
- 尽量只遍历一次
例子:
输入: nums = [1, 2, 1, 2, 0, 2, 1, 0, 2, 0, 0, 2]
输出: [0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2]
解题思路
如果只有两种颜色,那么很容易想到一前一后两个指针向中间遍历,颜色不对就交换位置。三种颜色仍然可以这么做,只不过要多一个指针,前后两个指针用来分隔已经排好的红色和蓝色,中间的指针来遍历元素:
- 如果是红色,那么和前指针交换,并两个一起向后移,前指针换过来的一定是白色的,因为中指针已经扫描过那些元素了
- 如果是白色,那么继续向后移
- 如果是蓝色,那么和后指针交换,后指针向前移,中指针不能后移,因为此时不确定换过来的元素是什么颜色
AC源码
class Solution(object): def sortColors(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ left = mid = 0 right = len(nums) - 1 while mid <= right: if nums[mid] == 0: nums[mid], nums[left] = nums[left], nums[mid] left += 1 mid += 1 elif nums[mid] == 1: mid += 1 else: nums[mid], nums[right] = nums[right], nums[mid] right -= 1if __name__ == "__main__": l = [1, 2, 1, 2, 0, 2, 1, 0, 2, 0, 0, 2] Solution().sortColors(l) assert l == [0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2]
欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。
0 0
- LeetCode: Sort Colors
- LeetCode Sort Colors
- LeetCode : Sort Colors
- leetcode 77: Sort Colors
- Leetcode 75 Sort Colors
- leetcode 101: Sort Colors
- [LeetCode]Sort Colors
- [leetcode]Sort Colors
- LeetCode-Sort Colors
- [leetcode] Sort Colors
- [LeetCode] Sort Colors
- [leetCode] Sort Colors
- LeetCode - Sort Colors
- leetcode:Sort Colors
- LeetCode | Sort Colors
- 【LeetCode】Sort Colors
- Leetcode: Sort Colors
- [LeetCode] Sort Colors
- eclipse 单机版 mahout collaborative demo
- css中中float,relative,absolute的使用注意的问题
- leetCode 104. Maximum Depth of Binary Tree
- 我收藏的有关Python的电子书和资料
- android ValueAnimator ObjectAnimator
- LeetCode Sort Colors
- C++:继承3(是圆内、圆外还是圆上)
- 从工程中删除Cocoapods
- Android Java四种引用区分 <17>
- 前后端分离,ajax前端跨域访问后端
- 收集的一些比较好的博客
- android开发之Camera(相机)
- 一篇关于字节序的文章
- hdu 3966 树链剖分(坑内存)