class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
# 法1:直接remove 将要remove的元素存储下来
# to_remove = []
# n = len(nums)
# for i in range(n):
# if i < n-1:
# if nums[i] == nums[i+1]:
# to_remove.append(nums[i])
# for i in range(len(to_remove)):
# nums.remove(to_remove[i])
# ans = len(nums)
# return ans
# 法2:直接remove 滑动窗口思想
# i = 0
# while i < len(nums):
# if i == 0:
# i += 1
# else:
# if nums[i] == nums[i-1]:
# nums.remove(nums[i])
# else:
# i += 1
# return len(nums)
# 法3:双指针法
# left指针的左侧是已经处理好的元素,也就是没有重复的元素
# left正在指向的是,可以用来存放下一个元素的位置
# right指向待处理的元素,如果right指向的元素可以放入处理好的序列,
# 那就把right指向的数给left,然后left++, right++,也就是left, right均指针右移
left, right = 0, 0
ans = 0
while right < len(nums):
if right == 0:
left += 1
right += 1
ans += 1
else:
if nums[right] == nums[left-1]:
right += 1
else:
nums[left] = nums[right]
left += 1
right += 1
ans += 1
return ans
06-05
469
10-29
156
06-27
178
01-02
502
09-25
1745
09-28
140