題目描述

將一個已經排序好的list中重複的數字刪去,並回傳list長度,必須以in-place的方式處理,不能使用額外的空間

解題思路

使用兩個指針,一個紀錄都沒重複的次數(slow),一個紀錄當前沒重複的數字(fast),如果重複,則更新沒重複的數字

Python

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        n = len(nums)
        if n < 2:
            return n
        slow, fast = 1, 1 
        for fast in range(1,n):
            if nums[fast-1] != nums[fast]:
                nums[slow] = nums[fast]
                slow += 1
        return slow

Golang

func removeDuplicates(nums []int) int {
	n := len(nums)
	if n < 2 {
		return n
	}
	slow, fast := 1, 1
	for fast < n {
		if nums[fast-1] != nums[fast] {
			nums[slow] = nums[fast]
			slow++
		}
		fast++
	}
	return slow
}