思路:按步修改,不能直接给列表赋值(不知道为啥就是不成功)
循环判断值是否为0,1,2
为0,cur++,left++,此结果符合最终要求
为1,cur++,left不变,因为还不确定后面有没有0来放到这个位置。如果left++了,代表这个位置也为0,但是这个位置为1,所以不能left++
为2,交换cur与right的值,right–,cur和left不变。left不变是因为我们不知道交换过来的数值是不是0,如果不是零的话,那么left不能变;cur不变是因为我们不知道到交换过来的是不是还是一个2,如果是的话,就需要进行再次判断
循环条件为left<=right,取等于是需要对cur=left=right的情况进行判断,因为这个值是没有经过分类的,也需要判断
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
num_0 = 0
cur = 0
num_2 = len(nums) - 1
while cur <= num_2:
if nums[cur] == 0:
nums[cur], nums[num_0] = nums[num_0], nums[cur]
cur += 1
num_0 += 1
elif nums[cur] == 1:
cur += 1
else:
nums[cur], nums[num_2] = nums[num_2], nums[cur]
# cur += 1 此处不应有cur += 1,因为
num_2 -= 1