80_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.

Solution

Variant of Leetcode 26.

def removeDuplicates(nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    # corner cases
    if len(nums) <= 2:
        return len(nums)

    write_index = 2
    for i in range(2, len(nums)):
        if nums[write_index - 2] != nums[i]:
            nums[write_index] = nums[i]
            write_index += 1
    return write_index

Last updated