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

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

时间:2025-01-22 14:29:12浏览次数:3  
标签:last 删除 元素 算法 数组 Go array finder

《零基础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

 

 

标签:last,删除,元素,算法,数组,Go,array,finder
From: https://blog.csdn.net/qq_39728668/article/details/145258308

相关文章

  • GoAccess : 高效开源的Web日志分析工具
    什么是GoAccessGoAccess是一款高效、开源的Web日志分析工具,专为快速解析和可视化Apache、Nginx等Web服务器的访问日志而设计。它通过命令行界面提供实时分析功能,能够生成详细的访问统计、访客排名、页面请求等关键信息,并支持将分析结果导出为HTML、JSON、CSV等多种格式。GoAccess......
  • Gorm-字段级权限控制
    可导出的字段在使用GORM进行CRUD时拥有全部的权限,此外,GORM允许您用标签控制字段级别的权限。这样您就可以让一个字段的权限是只读、只写、只创建、只更新或者被忽略。typeUserstruct{Namestring`gorm:"<-:create"`//允许读和创建Namestring`gorm:"<-:update......
  • 请问如何在帝国CMS中修改网站logo?
     帝国CMS是一种功能强大的内容管理系统,修改网站logo相对简单。以下是详细的步骤:备份文件: 在开始修改之前,确保备份网站的logo文件。准备新logo: 准备一个新的logo图片,确保图片格式为PNG或JPEG,并且大小适合网站的需求。上传新logo: 使用FTP工具(如FileZilla)连接到服务器,将新log......
  • 批量检查微信小程序是否被封禁的 Go 源码接口
    本文展示了一个使用Go语言编写的示例,能够批量检查微信小程序是否被封禁。通过调用接口https://down.ychengsnsm.com/xcx/checkxcx.php?appid={appid},根据返回的code字段判断小程序的状态。若code为1,则表示小程序正常;若code为0,则表示小程序被封禁,并且封禁原因会......
  • 从一个无序的整数数组中,找出最小和最大数之间缺失的数字,要求最小的时间复杂度
    为了找出无序整数数组中最小和最大数之间缺失的数字,我们首先需要确定最小和最大的数字。这可以通过遍历数组一次来实现,时间复杂度为O(n),其中n是数组的长度。一旦我们有了最小和最大的数字,我们可以检查它们之间的所有数字是否都存在于数组中。但是,如果直接遍历检查每个数字,时间复......
  • 写一个方法实现“插入排序算法”,并解释下时间复杂度和空间复杂度
    插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供......
  • 03垃圾回收篇(D1_垃圾收集器算法底层导论)
    目录一、为什么我们要去了解垃圾收集和内存分配二、对象已死?1.引用计数算法2.可达性分析算法3.再谈引用4.生存还是死亡5.回收方法区三、垃圾收集算法1.简介2.分代收集理论2.1.弱分代/强分代假说2.2.前面两代假说的缺陷3.标记-清除算法(Mark-Sweep)4.标......
  • Java 大视界 -- Java 大数据中的强化学习算法实践与优化 (57)
           ......
  • 细说机器学习算法之XGBoost及代码实现
    系列文章目录第一章:Pyhton机器学习算法之KNN第二章:Pyhton机器学习算法之K—Means第三章:Pyhton机器学习算法之随机森林第四章:Pyhton机器学习算法之线性回归第五章:Pyhton机器学习算法之有监督学习与无监督学习第六章:Pyhton机器学习算法之朴素贝叶斯第七章:Pyhton机器学习算......
  • Google Imagen 3 ——文本转图像模型的新基准
    GoogleImagen3——文本转图像模型的新基准DigiOps与人工智能正在改变我们创建视觉效果的方式。文本转图像模型使从简单的文本描述生成高质量图像变得非常容易。广告、娱乐、艺术和设计等行业已经采用这些模型来探索新的创意可能性。随着技术的不断发展,内容创作的机会变......