Given an integer array
Output: k = 2, nums = [1,2,_]
Output: k = 5, nums = [0,1,2,3,4,_,_,_,_,_]
Constraints:
1 <= nums.length <= 3 * 104 -100 <= nums[i] <= 100 - Array is sorted in non-decreasing order.
Contents
Solution — Slow/Fast Two Pointers Complexity Analysis
- Start
slow = 0 ,fast = 1 . - Whenever
nums[fast] != nums[slow] , we found a new unique value — incrementslow and copy it. slow + 1 is the count of unique elements.
Trace through Example 2: nums = [0,0,1,1,1,2,2,3,3,4]
| fast | nums[fast] | nums[slow] | Action | slow |
|---|---|---|---|---|
| 1 | 0 | 0 | duplicate, skip | 0 |
| 2 | 1 | 0 | new → slow=1, nums[1]=1 | 1 |
| 3 | 1 | 1 | duplicate, skip | 1 |
| 4 | 1 | 1 | duplicate, skip | 1 |
| 5 | 2 | 1 | new → slow=2, nums[2]=2 | 2 |
| 6 | 2 | 2 | duplicate, skip | 2 |
| 7 | 3 | 2 | new → slow=3, nums[3]=3 | 3 |
| 8 | 3 | 3 | duplicate, skip | 3 |
| 9 | 4 | 3 | new → slow=4, nums[4]=4 | 4 |
Return
- Time: O(n) — single pass through the array.
- Space: O(1) — in-place modification, no extra space.