给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
思路:定义快慢指针,让快指针去寻找重复值,找到慢指针走一步,快指针赋值慢指针
from typing import List
def removeDuplicates(self, num: List[int]) -> int:
def remove(self,num: List[int]):
slow = 0
fast = 1
while fast < len(num):
if num[fast] == num[slow]:
fast += 1
else:
slow += 1
num[slow] = num[fast]
fast += 1
return slow + 1
切片方法
思路:找到重复值,将重复值的第二位到末尾的数值位置用后面值覆盖
from typing import List
def remove(self,num: List[int]):
n = len(set(num))
i = 0
while i < n-1:
if num[i] == num[i+1]:
temp = num[i+1]
num[i+1:len(num)-1] = num[i+2:]
num[-1] = temp
continue
else:
i += 1
return i+1