class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        """
        time O(N) space O(1)
        step1: edge case--> nums is empty or nums less than 2
        step2: create start ptr, to track unique number so far; create cnt = 1
        step3: iterate nums, find number different from start ptr number, ptr += 1, then switch, cnt + 1 
        step4: return cnt 
        """
        
        if not nums or len(nums)<2:
            return len(nums)
        cnt = 1
        #j: unique numbers so far 
        j = 0
        # assuming len(nums) >2 
        for i in range(1,len(nums)):
            if nums[i] != nums[j]:
                j += 1 
                nums[j] =nums[i]
                cnt += 1
        return cnt
#02/06/2021
"""
keep overwritting value at left ptr when rigtht ptr is different from prev and increment left ptr by 1; otherwise, no change on left ptr 
""""
class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        l = 0
        n = len(nums)
        for r in range(n):
            if r > 0 and nums[r] == nums[r-1]:
                continue
            nums[l] = nums[r]
            l += 1
        return l