题目链接:https://leetcode-cn.com/problems/sort-colors/
难度:中等

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

我们使用整数012分别表示红色、白色和蓝色。

必须在不使用库的sort函数的情况下解决这个问题。

提示:
数组大小:[1, 300]

题解

思路:按照三向切分快速排序中partition那样切分

  1. class Solution:
  2. def sortColors(self, nums: List[int]) -> None:
  3. left, right, i = -1, len(nums)-1, 0
  4. while i <= right:
  5. if nums[i] == 0:
  6. left += 1
  7. nums[left], nums[i] = nums[i], nums[left]
  8. i += 1
  9. elif nums[i] == 1:
  10. i += 1
  11. else:
  12. nums[i], nums[right] = nums[right], nums[i]
  13. right -= 1