【Go - 小顶堆/大顶堆】

ops/2025/2/5 5:33:32/

在 Go 语言中,标准库 container/heap 提供了堆(Heap)的实现。可以使用 container/heap 包来实现自己的大顶堆或小顶堆。

小顶堆示例

以下是一个使用 container/heap 包实现的小顶堆示例:

package mainimport ("container/heap""fmt"
)type IntHeap []intfunc (h IntHeap) Len() int {return len(h)
}
func (h IntHeap) Less(i int, j int) bool {return h[i] < h[j]
}
func (h IntHeap) Swap(i int, j int) {h[i], h[j] = h[j], h[i]
}
func (h *IntHeap) Pop() interface{} {old := *hn := len(old)x := old[n-1]*h = old[0:n-1]return x
}
func (h *IntHeap) Push(x interface{}) {*h = append(*h, x.(int))
}func main() {h := &IntHeap{2, 1, 5}heap.Init(h)heap.Push(h, 3)m := (*h)[0]fmt.Printf("minimum: %d\n", m)m = heap.Pop(h).(int)fmt.Printf("minimum %d\n", m)m = heap.Pop(h).(int)fmt.Printf("minimum %d\n", m)}

注意📢 :

  • 涉及到空间变化的,Push,Pop 传参是指针类型,其余的是引用类型。
  • Push,Pop的参数为interface{},在内部再进行类型转换

大顶堆,则只需将Less函数改下,小于改为大于,其余代码一致。

func (h IntHeap) Less(i int, j int) bool {return h[i] > h[j]
}

http://www.ppmy.cn/ops/155784.html

相关文章

结构体和类

结构体和类 C结构体中的所有默认成员函数&#xff08;如&#xff1a;构造函数&#xff09;里面可以写一切合法的代码 不单单只可eg:初始化变量{}可以用来划定变量的使用范围 eg: int main() {{int a 0;//则a只能在这个{}里面使用}return 0 ;}<<输出运算符能够直接打印C…

牛客周赛 Round 79

题目目录 A 小红的合数寻找解题思路参考代码 B 小红的小球染色解题思路参考代码 C 小红的二叉树解题思路参考代码 D 小红的“质数”寻找解题思路参考代码 E 小红的好排列解题思路参考代码 F 小红的小球染色期望解题思路参考代码 A 小红的合数寻找 \hspace{15pt} 小红拿到了一个…

【R语言】环境空间

一、环境空间的特点 环境空间是一种特殊类型的变量&#xff0c;它可以像其它变量一样被分配和操作&#xff0c;还可以以参数的形式传递给函数。 R语言中环境空间具有如下3个特点&#xff1a; 1、对象名称唯一性 此特点指的是在不同的环境空间中可以有同名的变量出现&#x…

鲸鱼算法 matlab pso

算法原理 鲸鱼优化算法的核心思想是通过模拟座头鲸的捕食过程来进行搜索和优化。座头鲸在捕猎时会围绕猎物游动并产生气泡网&#xff0c;迫使猎物聚集。这一行为被用来设计搜索策略&#xff0c;使算法能够有效地找到全局最优解。 算法步骤 ‌初始化‌&#xff1a;随机生成一…

全面掌握市场信息:xtquant库在证券品种数据获取中的应用

全面掌握市场信息&#xff1a;xtquant库在证券品种数据获取中的应用 开篇点题&#xff1a;技术背景和应用场景 在量化交易领域&#xff0c;快速准确地获取市场基础信息是至关重要的。xtquant库提供了一种便捷的途径来获取各类证券品种的数据&#xff0c;包括股票、指数、基金等…

2025年02月02日Github流行趋势

项目名称&#xff1a;oumi 项目地址url&#xff1a;https://github.com/oumi-ai/oumi 项目语言&#xff1a;Python 历史star数&#xff1a;1416 今日star数&#xff1a;205 项目维护者&#xff1a;xrdaukar, oelachqar, taenin, wizeng23, kaisopos 项目简介&#xff1a;构建最…

八. Spring Boot2 整合连接 Redis(超详细剖析)

八. Spring Boot2 整合连接 Redis(超详细剖析) 文章目录 八. Spring Boot2 整合连接 Redis(超详细剖析)2. 注意事项和细节3. 最后&#xff1a; 在 springboot 中 , 整合 redis 可以通过 RedisTemplate 完成对 redis 的操作, 包括设置数据/获取数据 比如添加和读取数据 具体整…

vercel部署流程

1、清除缓存 npm cache clean --force 2、安装指定版本vercel&#xff08;例如31.0.0&#xff09; npm install vercel31.0.0 3、选择一种方式登录vercel npx vercel login 4、运行vercel&#xff0c;根据提示完成部署 npx vercel