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}
執行結果如下:
***
[左神java程式碼](https://github。com/algorithmzuo/coding-for-great-offer/blob/main/src/class28/Problem_0026_RemoveDuplicatesFromSortedArray。java)