leetcode--删除排序数组中的重复项(难度:easy)

本文分享了一个初学者在解决数组去重问题时的心得体会,并对比分析了自己的实现与优秀解决方案之间的差距,强调了理解题意的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过不断的修改,终于把自己写的代码正确的跑起来了,不过执行的时间是1304ms,跪了。才开始几天,我就已经怀疑自己是否适合编程了。下面贴上自己的代码。

class Solution:
    def removeDuplicates(self, nums):
    	k = 0
    	for i in range(len(nums)):
    		i = k
    		if i+1 < len(nums):
    			if nums[i] == nums[i + 1]:
    				nums.remove(nums[i])
    			else:
    				k += 1
    	return len(nums)

看了别人的代码后,觉得自己写的方法很笨,而且考虑到每一次remove都要对数据内的元素进行移动,就会非常的耗时。

不过还是简单的说一下自己的思路。

先不看k,这个循环就不用说了,然后判断i+1是否越界,如果不越界的话就判断相邻的两个元素是否相等,相等说明重复,这个时候删掉nums[i]即可。但是如果不相等的话,而且没有这个k的话,就会出现问题。

因为假设一开始有6个元素,那么len(nums)就是6,所以range(6)是固定好的了,但是我们在对nums进行remove操作的时候,数组的长度是会改变的,需要注意的是,数组的长度改变了,但是i却不会变回从0开始,因此我们需要一个变量k来控制。

所以k的作用就是在remove的时候,让i仍然从0开始,在相邻元素不相等的时候k自增,这样在下次进行比较的就是第二和第三个元素进行比较。

下面是高手的代码我也贴上来了,作为对比激励自己。

class Solution:
    def removeDuplicates(self, nums):
        if len(nums) < 2:
            return len(nums)
        # nums >= 2
        index = 1
        pre = nums[0]
        for i in range(len(nums)):
            if pre != nums[i]:
                pre = nums[i]
                nums[index] = pre
                index += 1
        return index

这个代码的运行速度是我的1/20,真的是自愧不如,我反思了一下并重新看了一下题目,题目里面有这样一句话

"你不需要考虑数组中超出新长度后面的元素。"

也就是说我其实没有必要去通过remove操作来删除元素,而且这样做还会增加我们的执行时间,非常的不划算。

然后看这位老哥的代码,他通过设置了pre这个中间变量,然后通过扫描数组,寻找与其不相等的值,然后pre等于这个不相等的值,最后Index+=1,需要注意的就是index是从1开始的。

这个代码的执行速度并不是最快的,但是我觉得是个很好的思路,因此我复制下来作为学习的范例了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值