This is a simple problem. We could use 2 indexes and an additional variable prev. The first index is to use to mark which number is been read now. And the second index is to mark the position to write the value to. Since there would always read before write, we don't need to consider if i1 is equal to i2.
class Solution: def removeDuplicates(self, nums: List[int]) -> int: prev = None i2 = 0 for i1 in range(len(nums)): if nums[i1] != prev: prev = nums[i2] = nums[i1] i2 += 1 return i2