80. 删除有序数组中的重复项 II
---
这边先做一道类似的题目
26.删除有序数组的重复项
相当于允许存在0个重复
目的计算不重复的个数,将不重复覆盖前方返回left+1
class Solution:
def removeDuplicates(self,nums:List[int])->int:
left = 0
for right in range(len(nums)):
if nums[right]==nums[left]:
continue
left+=1
nums[left]=nums[right]
return left+=1
---
而本体相当于允许存在2个重复
-<第一想法使用双指针,
代码:
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
if len(nums)==0:
return
left = 1#可以重复俩次,left从1开始,right从2开始
for right in range(2,len(nums)):
#比较前一和前一一个
if nums[right]==nums[left] and nums[right]==nums[left-1]:
continue
left+=1
nums[left]=nums[right]
return left+1
---
衍生到第K个
class Solution:
def removeDuplicates(self, nums: List[int], K: int) -> int:
left = K-1
for right in range(K,len(nums)):
tag = True
for i in range(K):
tag*=nums[right]==nums[left-1]
#nums[right]==nums[left-i] return Ture否则返回False
#tag再和之前做×运算
if tag:
continue
left+=1
nums[left]==nums[right]
return left