删除有序数组中的重复项(力扣刷题,python)

发布时间:2023年12月27日

题目如下:

我的解决办法:

遍历数组,当数组中对应元素个数不为1时,删除数组中第一个对应元素,否则继续遍历

具体代码实现如下:

nums=[1,1,1,1]
val = 2
class Solution:
    def removeDuplicates(self, nums: list[int]):
        if len(nums)<=1:        #数组长度为0或者1时,不需要删除,直接返回数组长度
            return len(nums)
        else:        #数组长度大于1时,删除重复元素并返回删除重复元素后的数组
            for num in nums[:]:
                if nums.count(num)!=1:
                    nums.remove(num)
            return len(nums)
S=Solution()        #实例化一个类
print(S.removeDuplicates(nums))
print(nums)

碰到的问题:

当数组长度大于1时,我最开始写的for循环的范围是:for num?in nums?后面在提交的时候有测试用例(由四个1组成的数组[1,1,1,1])出错了,但是试了很多其他的用例都没出错,不懂是什么原因。通过上网查找解决办法,看到有一篇博文写到出错的原因是:删除列表元素,导致列表内容改变,部分元素位置前移;当继续进行for循环时,索引继续加一,导致跳过一个元素。(具体参考:http://t.csdnimg.cn/QYmda)在[1,1,1,1]中被跳过的是第二个和第四个1(可以自己在纸上演算一遍),导致最后一个1的时候没有进入for循环,直接跳出来了,返回的结果是2,nums是[1,1]。后面将for num?in nums改成for num?in nums[:]后没有出错了。

文章来源:https://blog.csdn.net/m0_58498198/article/details/135234020
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。