Golang | 删除排序数组中的重复项?

2021-08-03    385    go 算法 数组 

题目

有一个已经排序的数字,要求将数组中重复的值删除,不能创建另一个数组,删除后返回新数组长度

完整题目

代码

在Golang中一般以切片代替数组,切片是引用,数组是值

package main

import (
    "fmt"
)

func main() {
    input := []int{1, 1, 3, 3, 3, 5, 6, 6, 6, 9, 9}
    num := removeDuplicates(&input)
    fmt.Println(num, input)
}

// 参数需使用引用形式
func removeDuplicates(nums *[]int) int {
    result := *nums
    // 防止边界越位
    if result == nil {
        return 0
    }
    left := 0
    for _, v := range result {
        if result[left] == v {
            continue
        }
        left++
        result[left] = v
    }
    *nums = result[:left+1]
    return left + 1
}

说明:

  • 需要注意边界问题,当切片未定义需防止越界

  • 切片虽然是引用,作为参数时只能修改里面的值,但切片本身是无法替换的,所以参数应该使用切片引用而不是切片本身