leetcode80-- Remove Duplicates from Sorted Array II

leetcode80-- Remove Duplicates from Sorted Array II

题目

Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively.

It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,1,2,3,3],

Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respectively.

It doesn't matter what values are set beyond the returned length.


和之前的第26题不同,这时候可以最多保有2个了,所以可以用一个记数器count来记录


class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if len(nums)<=2:
            return len(nums)
        
        # 仍用双指针法, 因为这时候可以保有两个,所以快的就初始化为1,然后用一个计数器count初始化为1,代表还可以再接受几次重复
        pre = 0
        cur = 1
        
        count = 1
        while cur<len(nums):
            if nums[pre]==nums[cur] and count==0:   # 这时候说明刚好是两个的情况,此时只让快的往前走.
                cur += 1
                
            else:
                if nums[pre] == nums[cur]:  # 这时候说明count=1
                    count -= 1
                else:  # 否则的话就归为1
                    count = 1
                # 
                pre += 1                
                nums[pre] = nums[cur]
                cur += 1
                
        return pre +1
                

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦