1. 程式人生 > 其它 >【leetcode】26:刪除有序陣列中的重複項 II

【leetcode】26:刪除有序陣列中的重複項 II

這個題目雖然說只有簡單難度,但是實際上這個題目的難度很大。尤其是這種雙指標的做法,很少有人能夠想到。

我們可以設立一個快指標和一個慢指標,快指標在陣列的第二個位置,也就是index=1的時候,慢指標在第一個位置,也就是在index=0的時候。

當快指標和慢指標所指向的元素的大小不相同的時候,慢指標就向後移動一個位置,當快慢指標所指向的元素大小相同的時候,慢指標保持不變,快指標向後移動一個位置。如圖所示:

這樣就可以保證,在每次慢指標移動的時候,慢指標左邊的元素一定是distinct的,不會有重複元素。而快指標只是幫助我們找重複元素。

解答的程式碼如下:

class Solution:
    
def removeDuplicates(self, nums: List[int]) -> int: if len(nums) == 0 or len(nums) == 1: return len(nums) slow = 0 fast = 1 while fast < len(nums): if nums[slow] == nums[fast]: fast += 1 else: slow
+= 1 nums[slow] = nums[fast] #陣列的新長度為什麼是slow+1?因為最後slow到了已經排序好的陣列的最右端 return slow + 1