双指针 时间复杂度O(N)
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
j = 0
for i in range(len(nums)):
if nums[i] != nums[j]:
j += 1
nums[j] = nums[i]
return j + 1
通用解法 最多保留k个相同数值 时间复杂度O(N)
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
return self.removeDuplicatesK(nums, 1)
def removeDuplicatesK(self, nums: List[int], k) -> int:
i = 0
for n in nums:
# 前k个元素直接放行
# 之后的元素是否可以插入 需要和 i - k 位置的元素进行比较 不同才能插入
if i < k or nums[i - k] != n:
nums[i] = n
i += 1
return i