LeetCode Remove Duplicates from Sorted Array II

来源:互联网 发布:淘宝抠图多少钱一张 编辑:程序博客网 时间:2024/04/25 12:48

LeetCode解题之Remove Duplicates from Sorted Array II


原题

在 Remove Duplicates from Sorted Array(从一个有序的数组中去除重复的数字,返回处理后的数组长度) 的基础上,可以使每个数字最多重复一次,也就是说如果某一个数字的个数大于等于2个,结果中应保留2个该数字。

注意点:

  • 只能用常量的额外空间
  • 将要保留的数字移到数组前部,剩余的部分不需要处理

例子:

输入: nums = [1,1,1,2,2,3]

输出: 5 ([1,1,2,2,3,3])

解题思路

首先记住原数组是有序的,再看一下以下几种情况:

  • [1,1]
  • [1,1,2]
  • [1,1,2,2]
  • [1,1,2,2,3]

在每一次插入过程中,其实只要把要插入的元素和倒数第二个元素进行比较,如果相同,就忽略,因为倒数第一个数是夹在它们中间的,如果它们相等,那么就会有三个数相等;如果不同,就可以插入,因为在这样的情况下,最多只有倒数第二、倒数第一两个数相等。

AC源码

class Solution(object):    def removeDuplicates(self, nums):        """        :type nums: List[int]        :rtype: int        """        count = 0        for i in range(len(nums)):            if count < 2 or nums[count - 2] != nums[i]:                nums[count] = nums[i]                count += 1        return countif __name__ == "__main__":    l = [1, 1, 1, 2, 2, 3]    r = Solution().removeDuplicates(l)    assert l == [1, 1, 2, 2, 3, 3]    assert r == 5

欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。

2 0
原创粉丝点击