边工作边刷题:70天一遍leetcode: day 24-3

本文详细解析了三色旗问题的解决方案,通过维护左右边界指针的方法,有效地将数组中的元素分为0、1、2三个区域,并实现了原地排序。文章强调了处理过程中的一些关键细节,如在不同情况下指针的推进方式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sort Colors

要点:维护左右边界的指针,从左边互换或者本来就在中间,都要接着找下一个。而从右边互换来,不变。

  • 这是因为,处理顺序是从左向右,所以右边的互换来的还没有处理而左边都是处理过的。
  • 这里一个错误点就是左边互换来的也不找下一个。这样的问题是如果左边和当前正好是同一个位置(这种情况只会在当前为0时),永远没法前进。而这种情况实际没发生互换并且都为0,可以同步推进。而其他情况也被包括进来因为换来的肯定是1,可以继续处理下一个
class Solution(object):
    def sortColors(self, nums):
        """
        :type nums: List[int]
        :rtype: void Do not return anything, modify nums in-place instead.
        """
        left,right=0,len(nums)-1
        i = 0
        while i<=right:
            if nums[i]==0:
                nums[left],nums[i]=nums[i],nums[left]
                left+=1
                i+=1
            elif nums[i]==1:
                i+=1
            else:
                nums[right],nums[i]=nums[i],nums[right]
                right-=1
                
            

转载于:https://www.cnblogs.com/absolute/p/5678011.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值