2021-09-20:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O
Posted 福大大架构师每日一题
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-09-20:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O相关的知识,希望对你有一定的参考价值。
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
}
执行结果如下:
以上是关于2021-09-20:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O的主要内容,如果未能解决你的问题,请参考以下文章