给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
不要另外定义一个数组,您必须通过用 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],则无法正确统计非重复数字的个数。希望之后我能做出既正确又能在时限内完成的方法。