LeetCode -python- 从排序数组中删除重复项

1.自己的做法

早上开始刷题,在第一题上,一开始想的是用for循环来进行删除操作,可是没想出来,于是后来想到了用while循环。题意中说的是

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

我理解的意思是把那些重复的数字都移到数组的最后,然后数组前面的项便均是非重复项。但是我在写代码的时候直接把重复的项给删除了,代码如下:

nums = [0,0,1,1,1,2,2,3,3,4]
i = 0
leng = len(nums)
while(i<leng):
    j = i+1
    while(j<leng):
        if nums[j] == nums[i]:
            del nums[j]            
            #此处是因为我们将重复项删除了,那么j的取值范围也要变化,不然取值就超过范围
            leng = leng-1
           #此处是为了防止出现多个连在一起的重复项
            j = j - 1
        j = j + 1
    i = i+1
print(nums)

nums[i]为被比较项,nums[j]为比较项。
这个程序在Leetcode上提交后通过测试的费时比较大,但是对于[0,1,0,1,0]这种间断性重复项的数组也有效。如下所示
在这里插入图片描述
所以下一步就是在保证现有效果的基础上,减少运行时间。

2. 根据leetcode的解答,我又写了如下的代码

class Solution:
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if (len(nums)==0): 
            return 0
        i = 0
        for j in range(i+1,len(nums)):
            if nums[j] != nums[i]:
                i += 1
                nums[i] = nums[j]
        return i+1                  

运行时间很短,如下
在这里插入图片描述
但是可以看出,对于非连续的重复项,这个程序就无能为力了。

猜你喜欢

转载自blog.csdn.net/weixin_43748296/article/details/86576545