Given a sorted array nums, remove duplicates in-place such that each unique element appears only once.
Return the number of unique elements k.
- The first
kelements ofnumsmust contain the unique values - Elements after index
k - 1do not matter
- Array is sorted
- In-place modification (no extra array)
Use two pointers:
- One pointer reads elements
- One pointer writes unique elements
Instead of deleting duplicates, overwrite them.
-
First element is always unique → set
k = 1 -
Loop from index
1to end -
If current element ≠ previous element:
- Write it at index
k - Increment
k
- Write it at index
-
Return
k
class Solution:
def removeDuplicates(self, nums):
if not nums:
return 0
k = 1
for i in range(1, len(nums)):
if nums[i] != nums[i - 1]:
nums[k] = nums[i]
k += 1
return kInput
nums = [0,0,1,1,2,2,3]
Output
k = 4
nums = [0,1,2,3,_,_,_]
Only the first k elements are valid.
- Time:
O(n) - Space:
O(1)
- Lists & indexing
forloopifcondition- In-place modification
- Sorted array property
👉 Two Pointer Technique (Slow–Fast Pointer)