golang 最小堆获取前 n 的数据

背景

大量数据,想获取其中 Num 降序前五的数据

实现

package testimport ("container/heap""fmt""testing"
)type Element struct {Content stringNum     int
}// 定义一个最小堆
type ElementMinHeap []Element// 重写方法
func (h ElementMinHeap) Len() int            { return len(h) }
func (h ElementMinHeap) Less(i, j int) bool  { return h[i].Num < h[j].Num }
func (h ElementMinHeap) Swap(i, j int)       { h[i], h[j] = h[j], h[i] }
func (h *ElementMinHeap) Push(x interface{}) { *h = append(*h, x.(Element)) }
func (h *ElementMinHeap) Pop() interface{} {old := *hn := len(old)x := old[n-1]*h = old[0 : n-1]return x
}func TestMinHeap(t *testing.T) {elements := []cronjob.Element{{"content1", 2},{"content2", 1},{"content3", 5},{"content4", 3},{"content5", 4},{"content6", 6},{"content7", 8},{"content8", 7},{"content9", 9},{"content10", 0},}topN := 5h := &cronjob.ElementMinHeap{}heap.Init(h)for _, elem := range elements {if h.Len() < topN {heap.Push(h, elem)} else if elem.Num > (*h)[0].Num {heap.Pop(h)heap.Push(h, elem)}}topElements := make([]cronjob.Element, h.Len())for i := h.Len() - 1; i >= 0; i-- {topElements[i] = heap.Pop(h).(cronjob.Element)}fmt.Println("Top", topN, "elements:")for _, elem := range topElements {fmt.Printf("Content: %s, Num: %d\n", elem.Content, elem.Num)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle报错-ORA-12638:身份证明检索失败

navicat16连接本地oracle数据库成功后&#xff0c;连接远程数据库&#xff0c;同样是oracle11g&#xff0c;确认网络、用户名、密码都没问题的情况下&#xff0c;报错ora-12638。 解决方法&#xff1a; 这是由于Oracle的认证方式使用了本地操作系统认证&#xff08;NTS&#x…

记一次服务器崩溃事件

今天在安装Jenkins的时候&#xff0c;进行到插件安装这一步&#xff0c;本来一切顺利&#xff0c;结果最后安装完成之后一直进不去网页&#xff0c;显示连接超时&#xff0c;网上搜索了一圈也没发现什么相似的情况&#xff0c;当我疑惑的时候回到Linux控制台&#xff0c;发现命…

使用pkg -r 命令选项向jail虚拟子系统里安装软件@FreeBSD

刷FreeBSD 论坛的时候&#xff0c;看到这样一招&#xff1a;使用pkg -r选项&#xff0c;往jail等虚拟机子系统里安装软件。jails - How to install a pkg offline into a jail? | The FreeBSD Forums rootfbhost:~ # pkg pkg: not enough arguments Usage: pkg [-v] [-d] [-l…

Java项目:基于SSM框架实现的电子竞技管理平台【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的电子竞技管理平台 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

雨量传感器的分类和选型建议

物理原理分类 机械降雨量计&#xff08;雨量桶&#xff09;&#xff1a;最早使用的降雨量传感器&#xff0c;通过漏斗收集雨水并记录。主要用于长期降雨统计&#xff0c;故障率较低。电容式降雨量传感器&#xff1a;基于两个电极之间的电容变化来计算降雨量。当降雨时&#xff…

ES6 逐点突破系列 -- 函数的扩展

} f() // 1 var x 1; function foo(x, y function() { x 2; }) { var x 3; y(); console.log(x); } foo() // 3 x // 1 上面代码中&#xff0c;函数foo的参数形成一个单独作用域。这个作用域里面&#xff0c;首先声明了变量x&#xff0c;然后声明了变量y&#xf…

【C#】 读取图像为位图Bitmap

在C#中&#xff0c;要读取路径指定的图像文件并将其加载为Bitmap对象&#xff0c;可以使用Image.FromFile方法或者直接使用Bitmap构造函数。 一、使用 Image.FromFile 方法 using System.Drawing;public class ImageLoader {public static Bitmap LoadImageAsBitmap(string i…

linux桌面运维---第二天

1、启动Linux操作系统&#xff1a; 超级用户&#xff08;root&#xff09;的提示符是“#”,普通用户的提示符是“$”【重点】 [rootlocalhost home]# 解析&#xff1a; ​ root-----当前登录的用户的用户名 ​ ---表示地址域名 localhost---表示…

晨持绪科技:开好一家抖音小店运营怎么做

在数字时代&#xff0c;抖音小店以其独特的社交媒体优势迅速崛起&#xff0c;成为许多创业者的新宠。但如何有效运营&#xff0c;却是一门学问。首要任务是确定你的小店定位&#xff0c;这关系到后续的产品选择、目标客户群及营销策略。定位明确后&#xff0c;接下来便是挑选适…

深入解析NFS:原理、架构与实战操作

引言 在网络存储领域&#xff0c;NFS&#xff08;Network File System&#xff09;以其稳定性和高效性赢得了广泛的认可。作为一种分布式文件系统协议&#xff0c;NFS允许计算机客户端远程访问服务器上的文件&#xff0c;就如同访问本地文件一样便捷。本文将从技术角度深入探讨…

泡泡玛特携手浦东美术馆 推出SKULLPANDA重磅联名

6月20日&#xff0c;泡泡玛特“SKULLPANDA入画”快闪店在上海浦东美术馆重磅开幕&#xff0c;现场SKULLPANDA x 浦东美术馆联名吊卡“SKULLPANDA入画”重磅上线&#xff0c;这是潮流艺术家熊喵首次和国内顶级美术馆联动合作&#xff0c;除了吊卡以外&#xff0c;现场还有系列衍…

为什么有人说ipfs的核心是上传、下载和 Pin?

人们之所以说 IPFS 的核心是上传、下载和 Pin&#xff0c;主要是因为这些操作是 IPFS 协议的基本功能&#xff0c;同时也是 IPFS 实现分布式文件系统的关键步骤。 1. 上传&#xff08;Add&#xff09;&#xff1a;在 IPFS 中&#xff0c;上传是指将数据添加到 IPFS 网络中。当你…

IP地址SSL证书快速申请攻略

一、IP地址定义 互联网协议地址&#xff08;IP地址&#xff09;是为互联网上的每台设备分配的一个唯一标识符。它就像是设备在网络中的“家庭住址”&#xff0c;使得数据包能够准确地发送到目的地。IP地址有两种主要类型&#xff1a;IPv4和IPv6。IPv4使用32位地址&#xff0c;…

vue+element-ui实现动态的权限管理和菜单渲染_权限设置ui

需求&#xff1a;需要根据不用的用户匹配不同的管理权限&#xff0c;既&#xff1a;匹配不同的操作导航&#xff0c;尤其体现在后台管理系统内&#xff0c;如果仅仅只是在导航菜单内不予显示&#xff0c;仍然是可以通过路径直接打开页面&#xff0c;因为其路由信息已经在路由信…

简单使用百度地图

官方文档 <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="viewport" content

统计每2个小时时间段的设备各种状态时长,使用SQL做数据分析,“查表法”“表驱动法”使用案例分析

“表驱动法”是一种编程设计模式。 使用一个表&#xff08;使用数据结构&#xff0c;如数组、字典&#xff0c;Map等&#xff09;来存储和关联相关的数据和行为。 通过“查表”来根据输入参数&#xff0c;确定相应的处理逻辑或结果&#xff0c;从而减少使用大量的条件判断语句…

执行shell脚本出现 $‘ \r‘ 符号导致执行失败【解决】

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

深信服AC行为管理报错

报错信息&#xff1a; e0:alarmevent.cpp:54 exec cmd: /ac/common/app/kvupd -v failed 说明&#xff1a; 截止到上网行为管理12.0.80及全网行为管理13.0.102版本&#xff0c;AC凌晨&#xff08;0点-7点&#xff09;会重启进程让设备更好的运行&#xff0c;凌晨重启告警属于正…

Leetcode刷题(四十二)

美丽下标对的数目&#xff08;Easy&#xff09; 给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c;如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c;则认为 nums[i] 和 nums[j] 是一组 美丽…

unity基础 常用的API及脚本模板

对于刚学unity的新手&#xff0c;c#脚本基础尤为重要&#xff0c;一文带你搞定一些简单实用的小脚本&#xff0c;让你轻松入门。 常用的API &#xff08;部分源于网络&#xff0c;侵权滴删&#xff09; 1.Transform Transform是用于控制游戏对象位置、旋转和缩放的组件。其AP…