Remove Duplicates from Sorted Array

Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. Return the number of unique elements k. The first k elements of nums must contain the unique elements in sorted order.

Example 1
Input: nums = [1,1,2]
Output: k = 2, nums = [1,2,_]
Example 2
Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: k = 5, nums = [0,1,2,3,4,_,_,_,_,_]
Constraints:

Contents

Solution: Slow/Fast Two Pointers

slow marks the position to place the next unique element. fast scans through the array to find new unique values.

Java
public int removeDuplicates(int[] nums) {
    int slow = 0;

    for (int fast = 1; fast < nums.length; fast++) {
        if (nums[fast] != nums[slow]) {
            slow++;
            nums[slow] = nums[fast]; // place next unique element
        }
        // else: duplicate — fast moves forward, slow stays
    }
    return slow + 1; // number of unique elements
}
Trace through Example 2: nums = [0,0,1,1,1,2,2,3,3,4]
fastnums[fast]nums[slow]Actionslow
100duplicate, skip0
210new → slow=1, nums[1]=11
311duplicate, skip1
411duplicate, skip1
521new → slow=2, nums[2]=22
622duplicate, skip2
732new → slow=3, nums[3]=33
833duplicate, skip3
943new → slow=4, nums[4]=44

Return slow + 1 = 5. First 5 elements: [0,1,2,3,4].

Complexity Analysis