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