[Leetcode][python]Sort Colors/颜色分类

迷南。 2022-06-07 12:19 264阅读 0赞

题目大意

给出一个由红、白、蓝三种颜色组成的数组,把相同颜色的元素放到一起,并整体按照红、白、蓝的顺序。用0表示红色,1表示白色,2表示蓝色。这题也称为荷兰国旗问题。

解题思路

参考:
https://shenjie1993.gitbooks.io/leetcode-python/075 Sort Colors.html

三指针:如果只有两种颜色,那么很容易想到一前一后两个指针向中间遍历,颜色不对就交换位置。三种颜色仍然可以这么做,只不过要多一个指针,前后两个指针用来分隔已经排好的红色和蓝色,中间的指针来遍历元素:
如果是红色,那么和前指针交换,并两个一起向后移,前指针换过来的一定是白色的,因为中指针已经扫描过那些元素了
如果是白色,那么继续向后移
如果是蓝色,那么和后指针交换,后指针向前移,中指针不能后移,因为此时不确定换过来的元素是什么颜色

代码

  1. class Solution(object):
  2. def sortColors(self, nums):
  3. """
  4. :type nums: List[int]
  5. :rtype: void Do not return anything, modify nums in-place instead.
  6. """
  7. left = mid = 0
  8. right = len(nums) - 1
  9. while mid <= right:
  10. if nums[mid] == 0:
  11. nums[mid], nums[left] = nums[left], nums[mid]
  12. left += 1
  13. mid += 1
  14. elif nums[mid] == 1:
  15. mid += 1
  16. else:
  17. nums[mid], nums[right] = nums[right], nums[mid]
  18. right -= 1

总结

发表评论

表情:
评论列表 (有 0 条评论,264人围观)

还没有评论,来说两句吧...

相关阅读

    相关 颜色分类(Java)

    75. 颜色分类 > 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 >

    相关 LeetCode--颜色分类

      给定一个包含红色、白色和蓝色,一共 n 个元素的数组,[原地][Link 1]对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用

    相关 75. 颜色分类

    给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分