给你一个 非严格递增排列 的数组
nums,请你**原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回nums中唯一元素的个数。考虑
nums的唯一元素的数量为k。去重后,返回唯一元素的数量k。
nums的前k个元素应包含 排序后 的唯一数字。下标k - 1之后的剩余元素可以忽略。
题目要求原地删除重复元素,所以不能直接使用del删除元素,这样会导致顺序错乱,也不是原地,原地只能交换,所以使用快慢指针。当遇到快慢指针值不相同时进行先+1再交换,如果相同值直接跳过。时间复杂度O(n),空间复杂度O(1)
python
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if not nums:
return 0
slow = 0
for fast in range(1, len(nums)):
if nums[slow] != nums[fast]:
slow += 1
nums[slow] = nums[fast]
return slow + 1