Approach 1: Optimal

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if len(nums) == 0: return 0
    
        left, i = 0, 0
 
        while i < len(nums):
            nums[left] = nums[i]
 
            while i < len(nums) and nums[left] == nums[i]:
                i += 1
            
            left += 1
 
        return left

Complexity

Time:
Space:

Other Languages

Go

func removeDuplicates(nums []int) int {
    left := 0
 
    for i := 1; i < len(nums); i++ {
        if nums[i] != nums[i - 1] {
            left += 1
            nums[left] = nums[i]
        }
    }
 
    return left + 1
}