【leetcode】75:颜色分类

 

答案:

class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        p0, cur, p2 = 0, 0, len(nums)-1
        while cur <= p2:
            if nums[cur] == 0:
                nums[p0], nums[cur] = nums[cur], nums[p0]
                p0 += 1
                cur += 1
            elif nums[cur] == 2:
                nums[cur], nums[p2] = nums[p2], nums[cur]
                p2 -= 1
                #这个时候,不移动指针cur,因为
            else:
                cur += 1

为什么当数字=2的时候,不移动指针。明天再来想想具体的原因。

原因,因为我们的cur指针从左往右移动,左边之前的元素一定是0。假设cur和右指针交换位置之后,交换过来的也是2,如果我们cur向后移动了,那么中间就会有2的元素,无法将所有的2都移动到最右端。2将会出现在cur的左边。

however,我们如果cur指向的是0,假设交换过来的也是0,cur往后移动,这完全没关系,因为我们正需要0在cur的后面。

这个双指针的方法很难想到,需要极高的智慧。

posted @ 2021-10-18 22:03  Geeksongs  阅读(24)  评论(0编辑  收藏  举报

Coded by Geeksongs on Linux

All rights reserved, no one is allowed to pirate or use the document for other purposes.