《零基础Go语言算法实战》【题目 7-4】删除数组重复项,使每个元素只出现一次并返回新的长度

《零基础Go语言算法实战》【题目 7-4】删除数组重复项,使每个元素只出现一次并返回新的长度
给定一个排序数组 array,就地删除重复项,使每个元素只出现一次并返回新的长度。不要为另一个数组分配额外的空间,开发者必须通过使用空间复杂度为 O(1) 的额外内存就地修改输入数组来做到这一点。示例如下。
输入:
array = [5,5,6]
输出:
2
【解答】
① 思路。
本题可以通过希尔排序算法实现。注意本题中数组的删除并不是真的删除,只是将删除
的元素移动到数组后面的空间,然后返回数组实际剩余元素的个数,最终进行判断时会读取
数组剩余元素的个数进行输出。
② Go 语言实现。

package main

import "fmt"

// 删除重复元素
func removeDuplicates(array []int) int {
	if len(array) == 0 {
		return 0
	}
	last, finder := 0, 0
	for last < len(array)-1 {
		for array[finder] == array[last] {
			finder++
			if finder == len(array) {
				return last + 1
			}
		}
		array[last+1] = array[finder]
		last++
	}
	return last + 1
}

func main() {
	array := []int{5, 5, 6}
	res := removeDuplicates(array)
	fmt.Println(res)
}

//$ go run interview7-4.go
//2

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值