题目链接:https://leetcode-cn.com/problems/sort-colors/
难度:中等
描述:
给定一个包含红色、白色和蓝色、共n
个元素的数组nums
,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数0
、1
和2
分别表示红色、白色和蓝色。
必须在不使用库的sort
函数的情况下解决这个问题。
提示:
数组大小:[1, 300]
题解
思路:按照三向切分快速排序中partition
那样切分
class Solution:
def sortColors(self, nums: List[int]) -> None:
left, right, i = -1, len(nums)-1, 0
while i <= right:
if nums[i] == 0:
left += 1
nums[left], nums[i] = nums[i], nums[left]
i += 1
elif nums[i] == 1:
i += 1
else:
nums[i], nums[right] = nums[right], nums[i]
right -= 1