本文主要是介绍leetcode 80 删除有序数组中的重复项 II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
正文
仍旧使用双指针, 思想与 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
如果大家觉得有用,就请点个赞吧~
这篇关于leetcode 80 删除有序数组中的重复项 II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!