题目
已知一个有序序列,请原地删除序列中重复出现的元素,返回删除重复元素后的序列长度 要求时间复杂度O(n),空间复杂度O(1)
例子
remove_duplicate([0,0,1,1,1,2,2,3,3,4,4,4,5]) -> 6
remove_duplicate([0,0,1,1,3,4,5]) -> 5
假设
- 输入的数组不为空,且一定符合题意
tips
- 快速排序变形
答案
解法1
def remove_duplicate(l):
tail = 0
for i in range(1,len(l)):
if l[i] != l[i - 1]:
l[tail + 1] = l[i]
tail += 1
return tail + 1
性能:
- 时间复杂度
O(n)
- 空间复杂度
O(1)
关键点:
- 快速排序变形