golang slice去重_go slice去重-程序员宅基地

技术标签: golang  golang高性能服务器编程  

以前去面试,某个面试题目如下:

数据类型如下:

type ele struct {
    
	id int
	lastTime time.Time
}

请编写函数,对Id重复的元素,只保留lastTime最新的元素。

分析:先排序后去重速度会比盲目去重要快,按照id排序后需求去重的数据比较集中,比按照时间戳排序要快。 方案如下:

  • 按照id排序
  • 在排序后的slice上面放置窗口滑动块,窗口的范围是:id连续相同的元素
func RemoveDuplicates(islice []ele, dna int) []ele {
    
	sort.Slice(islice, func(i, j int) bool {
    
		return islice[i].id < islice[j].id
	})
	
	rslice := make([]ele, dna)
	for i, base, end := 0 , 0, 0; end +1 < len(islice); {
    
		if islice[base].id == islice[end+1].id {
    
			if islice[base].lastTime.Before(islice[end+1].lastTime) {
    
				islice[base].lastTime = islice[end+1].lastTime
			}
			end += 1
		} else {
    
			rslice[i] = rslice[base]
			end += 1
			base = end
			i += 1
			rslice[i] = islice[base]
		}
	}
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jacky128256/article/details/124489575

智能推荐

salesforce学习资源_oproarts-程序员宅基地

文章浏览阅读2.1k次,点赞3次,收藏7次。资料查询標準オブジェクトAPI一覧 Salesforce および Force.comのオブジェクトリファレンス(reference)参照 https://developer.salesforce.com/ja/ https://help.salesforce.com/home ダウンロード可能なユーザガイド 開発環境とライセンスについて ユーザライセンス Salesforceは開..._oproarts

单片机STM32开发中常用库函数分析_stm32 互相关函数-程序员宅基地

文章浏览阅读341次。1.GPIO初始化函数用法:voidGPIO_Configuration(void){GPIO_InitTypeDefGPIO_InitStructure;//GPIO状态恢复默认参数GPIO_InitStructure.GPIO_Pin=GPIO_Pin_标号|GPIO_Pin_标号;//管脚位置定义,标号可以是NONE、ALL、0至15。GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//最高输出速度为50MHzGPIO_InitStruct_stm32 互相关函数

笔记-记录一个重写compareTo排序_compareto重写多个数值排序-程序员宅基地

文章浏览阅读98次。package com.doria.learnProject.mongodb;import com.doria.learnProject.mongodb.pojo.CompanyInfo;import com.doria.learnProject.mongodb.pojo.User;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.*;public class Psvm {_compareto重写多个数值排序

给图片加盖章-程序员宅基地

文章浏览阅读599次。package com.cn.wangk.test;import java.io.*;import com.sun.image.codec.jpeg.*;//sun公司仅提供了jpg图片文件的编码apiimport java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.g..._java实现给图片盖章

怎么让人物脚贴地 模型_UE4-(IK)实现人物脚贴合地面解决斜坡上脚无旋转无法贴合地面问题...-程序员宅基地

文章浏览阅读774次,点赞2次,收藏3次。在斜面上脚陷入模型中,需要设置旋转值对脚的骨骼进行一个旋转。解决思路:在射线检测中可以获取到检测点的法线方向,根据法线方向来计算出脚应该向哪个方向进行适当的旋转,在斜坡上,人物脚需要旋转的轴为x轴和y轴以便来贴合地面,z轴方向的旋转是不需要进行修改的。 如图所示,我们需要求得水平面与斜坡的夹角用来得出人物在x轴上的脚旋转量,在蓝图中提供反正切函数,反正切 = 锐角的邻边/对边 所以 反正切值..._原神中角色的脚如何贴合斜面

idea 配置maven,其实不用单独下载Maven的。以及设置新项目配置,省略每次创建新项目都要配置一次Maven_安装idea后是不是不需要安装maven了?-程序员宅基地

文章浏览阅读1w次,点赞12次,收藏41次。说来也是惭愧,一直以来,在装环境的时候都会从官网下载Maven。然后再在idea里配置Maven。以为从官网下载的Maven是必须的步骤,直到今天才得知,idea有捆绑的 Maven 我们只需要搞一个配置文件就行了无需再官网下载Maven包以后再在新电脑装环境的时候,只需要下载idea ,网上找一个Maven的配置文件 放到 默认的 包下面就可以了!也省得每次创建项目都要重新配一次Maven了。如果不想每次新建项目都要重新配置Maven,一种方法就是使用默认的配置,另一种方法就是配置 .._安装idea后是不是不需要安装maven了?

随便推点

R语言包学习之tidyr包:数据结构重构_r语言addcol在哪个包-程序员宅基地

文章浏览阅读1.8k次。R语言包学习之tidyr包:数据结构重构_r语言addcol在哪个包

微信小程序怎么设置全局背景颜色?_微信小程序全局背景颜色-程序员宅基地

文章浏览阅读2.2w次,点赞5次,收藏29次。其实啊,这个可简单了,有手就行。首先,打开微信小程序开发工具。其次,找到全局配置app.json文件,修改"navigationBarBackgroundColor":"#222"。(这是修改的导航栏的颜色)。接着,在app.wxss文件中,配值page属性,然后把backgroun-color修改成你想要的颜色就可以了。最后,在app.json文件中,修改tabBar的背景颜色为你想要的颜色就可以了。(底部导航)..._微信小程序全局背景颜色

XML-DOM&SAX解析_解析xml_dome_sax-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏3次。声明:本文转自http://www.blogjava.net/orangelizq/archive/2009/07/19/287330.html,并对原文有部分改动。===========================摘要:XML作为过去十年中出现的最流行的技术之一,得到了广泛的应用,而其中XML解析技术是XML应用的关键。本文介绍了XML解析技术的研究动向,分析和比较了4种XM_解析xml_dome_sax

PYQT5学习_qcursor" is not defined-程序员宅基地

文章浏览阅读732次。一、搭建环境:PyQT5速成教程系列1-3https://blog.csdn.net/sqy941013/article/details/80548593这个教程的第二章配置QtDesigner那里讲得不清楚,可以看这个网址:https://blog.csdn.net/qq_42823043/article/details/88817034Bug1(未解决):spyder 3.3.4 requires pyqtwebengine<5.13, which is not installed._qcursor" is not defined

二代增强CUSTOMER EXIT_如何判断需求是第几代增强-程序员宅基地

文章浏览阅读325次。涉及到的:TCODE:SMOD、CMOD涉及到的表:TADIR,MODSAP介绍由于一代增强具有很多的局限性,所以出现了二代增强(SMOD、CMOD)。其中SMOD是查看出口对象的相关信息,CMOD是出口对象的管理。二代增强然后根据增强点来区分可以分为屏幕增强(S)、菜单增强(C)、功能增强(E)、表增强(T)。学习的步骤(1).通过T-CODE先查找到对应的程序名。(2)..._如何判断需求是第几代增强

Android ---- Ijkplayer阅读native层源码之IjkMediaPlayer_prepareAsync(五)_ijkplayer prepareasync-程序员宅基地

文章浏览阅读1.6k次。IjkMediaPlayer_prepareAsync的作用为播放器播放前做准备。其被Java层的IjkMediaPlayer.prepareAsync调用。IjkMediaPlayer_prepareAsync:static int ijkmp_prepare_async_l(IjkMediaPlayer *mp){ 省略。。。。 // 1.向消息链表发送一个FFP_MSG_PLAYBACK_STATE_CHANGED消息,改变IjkMediaPlayer的状态为MP_._ijkplayer prepareasync