leetcode刷题python之颜色分类

思路:按步修改,不能直接给列表赋值(不知道为啥就是不成功)
循环判断值是否为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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值