双指针
变量:
i遍历数组
j停留在应该替换的位置
cur保存当前遍历到的数字
cnt保存当前遍历到数字的个数
策略:
如果 nums[i] = cur,说明相同字符,此时:
如果 nums[j] != cur,那么应该替换
然后计数cnt+1,如果cnt>2,那么应该停留,因为已经有两个元素保存了
如果 nums[i] != cur,说明出现新字符,此时:
更新cur,和cnt,替换num[j]
class Solution:
def removeDuplicates(self, nums) -> int:
j = 0
cnt = 0
i = 0
cur = nums[j]
while i < len(nums):
# 如果当前和初始值相同
if nums[i] == cur:
# 当j还停留在上一个数字时,不应该移动
if nums[j] != cur:
nums[j] = nums[i]
cnt += 1
if cnt <= 2:
j += 1
else: # 遇到新元素
cur = nums[i]
nums[j] = nums[i]
j += 1
cnt = 1
i += 1
return j