首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >2021-09-20:给你一个有序数组 nums ,请你 原地 删除重

2021-09-20:给你一个有序数组 nums ,请你 原地 删除重

原创
作者头像
福大大架构师每日一题
修改2021-09-22 11:09:27
修改2021-09-22 11:09:27
3140
举报

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编写。代码如下:

代码语言:txt
复制
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
}

执行结果如下:

图片
图片

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档