nums = [0,0,1,1,1,2,2,3,3,4] の重複をなくすようにするので、下記のようになる。

nums = [0,1,2,3,4,,,,,_]

pointer を 2つ使う。

最初の数字は必ずユニークになるので、 left = 1 とする。

right は for でループさせながら icrement していく。

non-decreasing order なので、 right の値と right - 1 を比較して、 違う値なら一番初めに現れるユニークの数字だとわかる。

そのためその数字を left pointer がある位置に入れる。 その後、 left pointer をicrementする。

最終的に left pointer の位置がユニークな数の出現回数となるので、 その値を return する。

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        left = 1

        for right in range(1, len(nums)):
            if nums[right] != nums[right - 1]:
                nums[left] = nums[right]
                left += 1
        return left