2021-09-20:給你一個有序陣列 nums,請你 原地 刪除重複出現的元素

2021-09-20:給你一個有序陣列 nums ,請你 原地 刪除重複出現的元素,使每個元素 只出現一次 ,返回刪除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 O(1) 額外空間的條件下完成。示例 1:輸入:nums = [1,1,2]。輸出:2, nums = [1,2,_]。

福大大 答案2021-09-20:

雙指標。慢指標相當於map,快指標遍歷陣列一次。快指標等於慢指標時,快指標加1;快指標不等於慢指標時,快慢指標都加1。

時間複雜度:O(N)。

空間複雜度:O(1)。

程式碼用golang編寫。程式碼如下:

package mainimport “fmt”func main() { nums := []int{1, 1, 2, 2} ret := removeDuplicates(nums) fmt。Println(ret) fmt。Println(nums)}func removeDuplicates(nums []int) int { if len(nums) == 0 { return 0 } if len(nums) < 2 { return len(nums) } done := 0 for i := 1; i < len(nums); i++ { if nums[i] != nums[done] { done++ nums[done] = nums[i] } } return done + 1}

執行結果如下:

2021-09-20:給你一個有序陣列 nums,請你 原地 刪除重複出現的元素

***

[左神java程式碼](https://github。com/algorithmzuo/coding-for-great-offer/blob/main/src/class28/Problem_0026_RemoveDuplicatesFromSortedArray。java)