美文网首页
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