26. 刪除排序數組中的重複項(LeetCode 題解)

題目描述

給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。

不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。

26. 刪除排序數組中的重複項(LeetCode 題解)

說明:

為什麼返回數值是整數,但輸出的答案是數組呢?

請注意,輸入數組是以“引用”方式傳遞的,這意味著在函數里修改輸入數組對於調用者是可見的。

你可以想象內部操作如下:

26. 刪除排序數組中的重複項(LeetCode 題解)


雙指針法

算法

數組完成排序後,我們可以放置兩個指針 i 和 j,其中 i 是慢指針,而 j 是快指針。只要 nums[i] = nums[j],我們就增加 j 以跳過重複項。

當我們遇到 nums[j] ≠ nums[i] 時,跳過重複項的運行已經結束,因此我們必須把它(nums[j])的值複製到 nums[i+1]。然後遞增 i,接著我們將再次重複相同的過程,直到 j 到達數組的末尾為止。

Java 代碼實現

26. 刪除排序數組中的重複項(LeetCode 題解)

複雜度分析

  • 時間複雜度:O(n), 假設數組的長度是 n,那麼 i 和 j 分別最多遍歷 n 步。
  • 空間複雜度:O(1)。


分享到:


相關文章: