Problem: 80. 删除有序数组中的重复项 II
方法一
思路
快慢指针,slow代表符合条件的值存储位置,fast代表遍历列表当前值的位置,假设将fast位置的值存储到slow位置,必须满足slow位置的值与前两个值不相同才能存储,不符合遍历fast下一个位置的值,slow位置不变
Code
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
slow = min(2,len(nums)) # 开始两个值肯定符合条件
for fast in range(2,len(nums)):
if nums[fast] != nums[slow-2]: # 判断如果fast位置的值赋值给slow位置,是否与前两个不等
nums[slow] = nums[fast] # 符合,存储
slow+=1
return slow
方法二
思路
双指针:每次统计相同单词出现的次数,小于等于两次存储
Code
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
slow,count = 0,0
for fast in range(len(nums)):
if fast == 0 or nums[fast-1] != nums[fast]:
count = 0
count += 1
if count <= 2:
nums[slow] = nums[fast]
slow+=1
return slow