美文网首页
Leetcode - 26 - Python

Leetcode - 26 - Python

作者: Zpx007 | 来源:发表于2018-03-30 21:50 被阅读0次

给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。

不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点。

示例:

给定数组:nums= [1,1,2],你的函数应该返回新长度 2, 并且原数组nums的前两个元素必须是1和2不需要理会新的数组长度后面的元素


这道题其实我没有通过,因为超时。以下是我给出的代码:

class Solution(object):

    def removeDuplicates(self, nums):

        i = 1

        s = 0

        while s < len(nums)-1:

            if nums[s] == nums[i]:

                nums.pop(s)

                i = 1 + s

            elif i == len(nums)-1:

                s = s + 1

                i = s + 1

            else:

                i = i + 1

        return len(nums)

自己做完之后又上网看了看别人的代码,绝大多数都是快慢指针历遍整个列表,如下所示:

class Solution:  

    def removeDuplicates(self, A):  

    k=0  

    for i in range(1,len(A)):  

        if A[i] != A[k]:  

        k+=1 

         A[k] = A[i]  

    del A[k+1:len(A)]  

    return len(A)  

但是这种方法只有在列表中的数字是按照大小顺序排列时才有效。例如,当列表为[1,2,2,1],则无法正确统计非重复数字的个数。希望之后我能做出既正确又能在时限内完成的方法。

相关文章

网友评论

      本文标题:Leetcode - 26 - Python

      本文链接:https://www.haomeiwen.com/subject/qslwcftx.html