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

题干懒人包

基本上跟27题很像,输入是一个已经排序好的数组,最後输出非重复数值的数量,然後以下几点要注意:

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

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

    """
    比方说输入的 nums = [0,0,1,1,1,2,2,3,3,4]
    那最後回传值要等於五,且 nums[:5] 要包含 0, 1, 2, 3, 4 这几个数字,然後数字在该切片里的顺序不重要
    """
    

while 解法

head 纪录当前非重复的下标 (有点像 selection sort),i 回圈遍历到的当前元素,如果跟当前不一样非重复下标 head 加一,然後新的下标得值跟不一样的值进行交换。1

class Solution:
    def removeDuplicates(self, nums) -> int:
        head = 0
        i = 1
        while i < len(nums):
            if nums[head] != nums[i]:
                head += 1
                nums[head], nums[i] = nums[i], nums[head]
            i += 1
        return head + 1

for 解法

跟 while 原理一样只是改写 (这里用for 会好一点,因为不管怎麽样都要循环整个数组)

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

别人的写法

意义跟上面一样,只是从纪录非重复的,变成纪录重复的数量

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

<<:  NIST基础架构相关准则

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

[DAY 01] 线上测验的难点与可能降低作弊的方法

因为疫情的关系,学校从5月中旬就开始了远(ㄕㄨˇ)距(ㄐㄧㄚˋ) 各级学校除了最开始的设备、网路问题...

30天学会C语言: Day 28-指标&阵列

变数的大小 sizeof(<型别>) 可以查看某型别占用多少记忆体空间,单位是位元组 #...

【从零开始的 C 语言笔记】第二十九篇-读档 & 写档(1)

上一篇我们介绍了Struct这个语法,也大致介绍它的宣告、使用方式,不晓得大家有没有清楚一些呢! ...

追求JS小姊姊系列 Day11 -- 流程错了怎办?难道要跟D特终老?

前情提要 终於做出时间了,却又卡在流程问题,这次解决是否能顺利回到过去? 我:那要怎麽样避免因为流程...

Day 17 | 今天是Coroutiones的 Dispatcher

读到Dispatcher有种越来越难的感觉QQ 这些太高深的东西对於小萌新来说真的好杀热情阿 估计今...