Remove Duplicates from Sorted Array II

Problem statement

nums is sorted non-decreasing. Rewrite it in place so no value appears more than twice, preserve order, and return the new logical length.

Example:

Input:

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

Expected output:

length 5, nums begins [1, 1, 2, 2, 3, ...]

Practice on LeetCode: Remove Duplicates from Sorted Array II

Golang Solution

func removeDuplicates(nums []int) int {
    
    if len(nums) <= 1 {
        return len(nums)
    }

    countMap := make(map[int]int, 0)

    i, j := 0, 0
    for i < len(nums) && j < len(nums) {
        if res, ok := countMap[nums[j]]; ok {
            if res < 2 {
                countMap[nums[j]] += 1
                nums[i] = nums[j]
                i += 1
            }
        } else {
            countMap[nums[j]] = 1
            nums[i] = nums[j]
            i += 1
        }
        j += 1
    }

    return i
}