Go语言学习之力扣-删除有序数组中的重复项|Go主题月

359 阅读1分钟

作者:看那个码农

公众号:看那个码农

上期内容介绍了Go语言学习之创建方法|Go主题月

  • 方法的来源
  • 使用方法
  • 创建方法集
  • 使用方法和指针
  • 方法和函数的区别

本篇内容将继续带领大家走进Go语言的世界。

1.本文简介

Go语言学习之力扣-删除有序数组中的重复项

来源于:Leetcode26. 删除有序数组中的重复项

2.题目描述

给你一个有序数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度

不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。

示例 1:

输入:nums = [1,1,2]
输出:2, nums = [1,2]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。
不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。
不需要考虑数组中超出新长度后面的元素。

提示:

  • 0 <= nums.length <= 3 * 10410^4
  • -104 <= nums[i] <= 10410^4
  • nums 已按升序排列

3.思路与方法

由题意最后只用输出新数组的长度

  • 我们可以利用遍历,从数组第一个元素进行遍历;
  • 依次对比元素是否相同,将不同的元素往前移动;
  • 最后输出数组不同元素的那部分长度即可。

例如:我们用一个例子来直观地说明。

设定一个初始数组

num=[1,1,2,2,3,3]

设定两个起点进行遍历

node=0,i=1,
num[node]=1,num[i]=1,

如果num[node]!=num[i]

通过node++,使得node++的值等于此时i的值。

num[node]=num[i]

利用这样的方式,将同一个数组的不同元素都往前移动。

4.代码实现如下:

func removeDuplicates(nums []int) int {
    node:=0
    for i:=1;i<len(nums);i++{
        if nums[node]!=nums[i]{
            node++
            nums[node]=nums[i]
        }
    }
    return node+1
}

输出为:

image.png

如果你觉得这篇内容对你有帮助的话:

1、点赞支持下吧,让更多的人也能看到这篇内容

2、关注公众号:看那个码农,我们一起学习一起进步。