zoukankan      html  css  js  c++  java
  • 【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的后面。

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

  • 相关阅读:
    scrapy入门
    xpath的基本使用
    xpath 的用法
    线程同步
    Round #336 A. Saitama Destroys Hotel(Div.2)
    hdoj 1166 敌兵布阵(线段树and树状数组)
    hdoj 1873 看病要排队
    hdoj 2289 Cup
    hdoj 2689 Sort it
    hdoj 1150 Machine Schedule
  • 原文地址:https://www.cnblogs.com/geeksongs/p/15422560.html
Copyright © 2011-2022 走看看