给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
双指针
左指针指向当前不同元素的最大值(覆盖原数组的最新位置)
右指针指向原数组搜索元素的最新位置
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums) <= 1:
return len(nums)
p = 1; q = 1 # 从索引1开始,因为索引0肯定是与前面不同的元素
while q < len(nums):
# 当右指针指向元素不等于左指针前一个元素时,说明发现了一个不同元素
if nums[q] != nums[p-1]:
nums[p] = nums[q] # 覆盖左指针指向元素,左指针往后移
p += 1
q += 1
return p