题目
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
分析
该题目的难点在于在原地删除,所以无法使用
l=list(sort([1,2,2,3,4,]))
因为set()函数,表面上看是在原数组的基础上删掉了重复的元素,但是他实际上是重新创建了一个数组,所以不符合题目的要求。我最开始没有注意到这一点,所以在运行测试时,总是无法通过。
那么,不能用现成的函数的话,我们要怎么解决这个问题呢?
可以使用两个游标i,j,用j来定标,而i不断的向前移动,遇到后面存在重复元素的就继续移动,如果遇到后面不存在相同元素的就将该值赋值给j现在所在的元素,然后j加1.
代码实现
class Solution:
def removeDuplicates(self,l) :
j = 0
for i in range(len(l)):
if l[i] in l[i+1:] :
continue
l[j] = l[i]
j += 1
print(l[:j+1])
return j