80. Remove Duplicates from Sorted Array II

# Medium

Two pointers work together. One pointer points first element, the other one points third element.

Solution 1:

  1. Consider edge cases: less or equal than 2 elements

  2. Remove shouldn't be existed element

  3. Set p1=0, p2=2

  4. nums[p1] == nums[p2] indicates the element is repeated 3 times, then pop it

  5. nums[p1] != nums[p2], then p1 and p2 just move forward one step

Solution 2(faster):

  1. Consider edge cases: less or equal than 2 elements

  2. Set count=1, and track last element x

  3. Move should be existed element to correct position

// Some code
class Solution {
    public int removeDuplicates(int[] nums) {
        int p = 0, count = 0;
        for(int i = 1; i < nums.length; i ++) {
            if(nums[p] == nums[i]) {
                if(count == 0) {
                    count = 1;
                    nums[++p] = nums[i];
                }
            } else {
                count = 0;
                nums[++p] = nums[i];
            }
        }
        
        return p+1;
    }
}

Last updated