正文
仍旧使用双指针, 思想与 leetcode 26 删除有序数组中的重复项 一致。只是此时因为要求保留重复元素两次,我们的左侧指针可以从第二个数据开始,且右侧指针需要和两个元素的值进行判断。
class Solution:def removeDuplicates(self, nums: List[int]) -> int:left = 1for right in range(2, len(nums)):if nums[right] == nums[left] and nums[right] == nums[left - 1]:continueelse:left += 1nums[left] = nums[right]return left + 1
这里其实有一个 trick
,我们观察到数组是按照顺序排列的,因此,我们可以直接对比右侧指针所指向数据与左侧指针值 -1
的值所指向数据是否相等,相等,则右侧指针右移,不相等,则左侧指针值 +1
并存储右侧指针当前指向的数据。
class Solution:def removeDuplicates(self, nums: List[int]) -> int:left = 1for right in range(2, len(nums)):if nums[right] != nums[left - 1]:left += 1nums[left] = nums[right]return left + 1
如果大家觉得有用,就请点个赞吧~