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 main import "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 }
执行结果如下: