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

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
                
            
posted @ 2016-04-25 10:29  absolute100  阅读(85)  评论(0编辑  收藏  举报