[用 Python 解 LeetCode] (003) 80. Remove Duplicates from Sorted Array II

题干懒人包

给定一个排列好的列表,将它整理成重复项最多出现两次,比方说以下

[1,1,1,2,2,3] -> [1,1,2,2,3, ...]

最後回传整理完成的数量,比方说上面会回传 5 (1, 1, 2, 2, 3)。

最後以下几点要注意

  1. 只能修改该数组,利用的空间复杂度最多为1(意思就是不能创建新的数组append值)

  2. 不用管超过回传值以後nums的值

"""
比方说输入的 nums = [0,0,1,1,1,1,2,3,3]
那最後回传值要等於7,且 nums[:7] 要等於 [0,0,1,1,2,3,3]
"""

解法

用 head 纪录当前元素,tmp纪录元素重复几次,接下来回圈开始比较当前值与下一个值,

  1. 如果当前元素不等於遍历到的数值,head += 1 ,并在下标为 head 的地方存放元素,并将tmp设定成0(因为tmp要重置不然之後无法纪录重复有无发生)
  2. 当元素相同时,优先查看 tmp 是否为0,如果是的话代表该元素上一个没出现过,head += 1 ,并在下标为 head 的地方存放元素,并将 tmp += 1

最後返回 head + 1 (因为head是下标值,非长度)

def removeDuplicates(self, nums) -> int:
        head = 0
        tmp = 0
        for i in range(1, len(nums)):
            if nums[i] != nums[head]:
                head += 1
                tmp = 0
                nums[head] = nums[i]
            else:
                if tmp == 0:
                    head += 1
                    tmp += 1
                    nums[head] = nums[i]
        return head + 1

<<:  [用 Python 解 LeetCode] (002) 26. Remove Duplicates from Sorted Array

>>:  如何快速复制 (clone) 20 TB SQL Server 资料库 - 心得分享

安全控制(security controls)

双重控制、职责分离、权限分离和 M of N Control 是用於防止欺诈和错误的安全控制。但是,...

[Day-4] 变数宣告以及运算

今天学习了变数以及变数的应用 上次学习到把文字显示於萤幕(命令提示字元)上 这次要来练习将变数存放的...

JS 原始型别的包裹物件与原型的关联 DAY67

var b = new String('abcdef'); // 这里 String 为建构函式 c...

布林值判断的一些豆技巧(弄不好也是会造成专案死掉的)

前天讲了豆技巧,今天再讲一点好了... 假设有个情境是要用数个布林值来判断接下来要做什麽动作,先从简...

[DAY17]跟 Vue.js 认识的30天 - Vue 过渡(转场)及动画效果下篇(`<transition-group>`) - 多个元素的过渡及列表过渡

这一篇就来接续写完 Vue 过渡及动画的内容啦!希望能顺利写完我的 Vue 笔记。 多个元素的切换转...