从负数(不会编程)开始刷leetcode 【1】80. Remove Duplicates from Sorted Array II

使用语言: python
刷题顺序:https://medium.com/@yjiao7/1-leetcode-%E5%88%86%E7%B1%BB%E9%A1%BA%E5%BA%8F%E8%A1%A8%E7%AC%AC%E4%BA%8C%E7%89%88-%E5%A2%9E%E5%8A%A0%E9%87%8D%E7%82%B9250%E9%A2%98-bbf97a646edc
题目:在这里插入图片描述解题: 题目要求给出一个修改后的list,使得list的前n个元素满足单种元素最多重复一次的要求。
思路:将list想成两部分,一部分是处理后的,一部分是未处理的。不断寻找符合要求的元素,每找到一个就将其放在处理后的那段的末尾。
原始代码:64ms ,13.8 MB。为什么那么慢呢?

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        l = len(nums)
        if l < 3:
            return l
        else:
            next = 2
            for i in range(2,l):
                if nums[i] != nums[next - 2]:
                    nums[next] = nums[i]
                    next += 1
            return next

修改后的代码:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        next = 2
        l = len(nums)
        for i in range(2,l):
            if nums[i] != nums[next - 2]:
                nums[next] = nums[i]
                next += 1
        return min(next, l)

虽然并没有改变速度,但是更加美观。就算len(nums) < 3也不会报错,因为range函数的第二个参数小于第一个时,for loop不会执行
for loop 还有以下特性:

a = [1,2,3]
for i in a:
    print(i)
    print(a)
    a.pop(0)
-->
1
[1, 2, 3]
3
[2, 3]

I的取值是每次循环时按a的index来取的。

另一种思路:

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        Next = 2
        i = 2
        while i < len(nums):
            if nums[i] == nums[Next-2]:
                del nums[i]
            else:
                Next += 1
                i += 1
        return min(Next,len(nums))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值