解题思路
因为nums是一个排序数组,所以重复项只会出现在相邻的位置。可以通过双指针的方式来指定其中的元素,然后逐步往后移动进行比对,直到找到相邻且相等的元素删除即可。有一点要注意的是,如果连续出现三个重复的元素,用两两比对会漏掉一个,这个时候需以第一个重复元素为参照物进行比对,直到删除了所有的重复项后再往后移动。
代码实现
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
left, right = 0, 1
while right < len(nums):
if nums[left] == nums[right]:
nums.pop(right)
else:
left += 1
right += 1
return len(nums)
复杂度分析
时间复杂度: O(N) N表示数组长度,算法最多执行N次
空间复杂度: O(1) 由于对nums是原地操作的,不存在多余的空间使用所以是O(1)