go语言的堆排序实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、intheap的堆排序接口
  • 二、节点的堆排序实现
  • 三、leetcode 23. 合并 K 个升序链表


提示:以下是本篇文章正文内容,下面案例可供参考

一、intheap的堆排序接口

// An IntHeap is a min-heap of ints.
type IntHeap []intfunc (h IntHeap) Len() int           { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h IntHeap) Swap(i, j int)      { h[i], h[j] = h[j], h[i] }func (h *IntHeap) Push(x any) {// Push and Pop use pointer receivers because they modify the slice's length,// not just its contents.*h = append(*h, x.(int))
}func (h *IntHeap) Pop() any {old := *hn := len(old)x := old[n-1]*h = old[0 : n-1]return x
}

二、节点的堆排序实现

// An Item is something we manage in a priority queue.
type Item struct {value    string // The value of the item; arbitrary.priority int    // The priority of the item in the queue.// The index is needed by update and is maintained by the heap.Interface methods.index int // The index of the item in the heap.
}// A PriorityQueue implements heap.Interface and holds Items.
type PriorityQueue []*Itemfunc (pq PriorityQueue) Len() int { return len(pq) }func (pq PriorityQueue) Less(i, j int) bool {// We want Pop to give us the highest, not lowest, priority so we use greater than here.return pq[i].priority > pq[j].priority
}func (pq PriorityQueue) Swap(i, j int) {pq[i], pq[j] = pq[j], pq[i]pq[i].index = ipq[j].index = j
}func (pq *PriorityQueue) Push(x any) {n := len(*pq)item := x.(*Item)item.index = n*pq = append(*pq, item)
}func (pq *PriorityQueue) Pop() any {old := *pqn := len(old)item := old[n-1]old[n-1] = nil  // avoid memory leakitem.index = -1 // for safety*pq = old[0 : n-1]return item
}

三、leetcode 23. 合并 K 个升序链表

23. 合并 K 个升序链表


/*** Definition for singly-linked list.* type ListNode struct {*     Val int*     Next *ListNode* }*/
func mergeKLists(lists []*ListNode) *ListNode {if len(lists) == 0 {return nil}dummy := &ListNode{Val:  -1,Next: nil,}p := dummypq := &PriorityQueue{}for _, h := range lists {if h != nil {heap.Push(pq, h)}}for pq.Len() != 0 {node := heap.Pop(pq).(*ListNode)p.Next = nodeif node.Next != nil {heap.Push(pq, node.Next)}p = p.Next}return dummy.Next}// A PriorityQueue implements heap.Interface and holds Items.
type PriorityQueue []*ListNodefunc (pq PriorityQueue) Len() int { return len(pq) }func (pq PriorityQueue) Less(i, j int) bool {// We want Pop to give us the highest, not lowest, priority so we use greater than here.return pq[i].Val < pq[j].Val
}func (pq PriorityQueue) Swap(i, j int) {pq[i], pq[j] = pq[j], pq[i]
}func (pq *PriorityQueue) Push(x any) {*pq = append(*pq, x.(*ListNode))
}func (pq *PriorityQueue) Pop() any {old := *pqn := len(old)item := old[n-1]old[n-1] = nil // avoid memory leak*pq = old[0 : n-1]return item
}

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

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

相关文章

淘宝详情的 API 探秘:获取与运用全攻略

在电商领域&#xff0c;淘宝无疑是一座巨大的宝库&#xff0c;其中丰富的商品详情信息对于商家、开发者和数据分析人员来说具有极高的价值。而通过 API 接口来获取淘宝详情&#xff0c;则为我们打开了一扇高效获取这些信息的大门。 一、为什么要获取淘宝详情 首先&#xff0c;…

嵌入式系统中的实时操作系统任务调度策略

嵌入式系统中的实时操作系统任务调度策略 在嵌入式系统中&#xff0c;实时任务调度是确保系统响应性和稳定性的关键方面之一。不同的任务调度策略可以影响系统的性能和实时性。本文将深入探讨两种常见的实时任务调度策略&#xff1a;固定优先级调度和循环时间片调度&#xff0…

mysql查询语句执行流程

流程图 连接器&#xff1a;建立连接&#xff0c;管理连接、校验用户身份&#xff1b;查询缓存&#xff1a;查询语句如果命中查询缓存则直接返回&#xff0c;否则继续往下执行。MySQL 8.0 已删除该模块&#xff1b;解析 SQL&#xff0c;通过解析器对 SQL 查询语句进行词法分析、…

阿尔泰科技与西安交通大学陕西省某技术重点实验室共谋未来!

近日&#xff0c;阿尔泰科技的电子工程师&#xff08;熊工&#xff09;应邀前往西安交通大学陕西省某技术重点实验室&#xff0c;参与课题组项目的测试与调试工作。此次合作不仅成功推动了项目的进展&#xff0c;还为未来的深入合作奠定了坚实基础。 阿尔泰科技作为领先的测控技…

基于SpringBoot构造超简易QQ邮件服务发送(分离-图解-新手)

目录 获取QQ 授权码 SpringBoot构建 依赖 Yaml配置 服务编写 测试 获取QQ 授权码 https://mail.qq.com/ 接着后就会有对应的密钥了 SpringBoot构建 依赖 这里的建议是 2.0系列的Springboot版本用低一点的邮件依赖 <!-- 电子邮件 --> <dependency>&…

物联网实战:STM32+ESP8266温湿度数据采集上传Linux服务器与数据库可视化(附代码示例)

摘要: 本文将手把手教你搭建一个完整的物联网数据监控平台&#xff0c;使用STM32采集温湿度数据&#xff0c;通过ESP8266 WiFi模块上传至Linux服务器&#xff0c;并利用Python脚本将数据存储到MySQL数据库&#xff0c;最后实现每日平均值的计算和可视化展示。 关键词: STM32, …

抖音本地生活火爆!普通人如何申请抖音本地生活服务商?

当前&#xff0c;随着抖音外卖的正式开放&#xff0c;抖音本地生活的热度也迎来了新的高潮&#xff0c;与抖音本地生活服务商怎么申请等话题相关的词条更是成为了多个创业者社群的热搜榜单的常客。 事实上&#xff0c;就抖音本地生活服务商怎么申请等问题本身而言&#xff0c;…

nvm安装报错(镜像问题)

一、问题报错 安装的时候如果跟着网上早些时候的配置&#xff0c;调整了setting文件&#xff0c;配置镜像的话&#xff0c;可能报这个错误。 这个是因为他没检索到后面的链接地址&#xff0c;因为镜像的地址新的已经更换了。使用这个吧&#xff1a; node_mirror: https://npm…

java基础01—根据源码分析128陷阱以及如何避免128陷阱

源码分析128陷阱 如上图所示&#xff0c;int类型数据超过127依旧能正常比较&#xff0c;但Integer类型就无法正确比较了 /*** Cache to support the object identity semantics of autoboxing for values between* -128 and 127 (inclusive) as required by JLS.** The cache …

Python 文件操作:打开数据处理的大门

在 Python 的学习之旅中&#xff0c;文件操作是一个非常实用且必不可少的技能。不论是数据分析还是日常的数据处理&#xff0c;良好的文件操作技巧都能让你的编程之路更加顺畅。今天&#xff0c;我将带你走进 Python 文件操作的世界&#xff0c;不仅教你如何读写文件&#xff0…

视频监控管理平台智能边缘分析一体机视频监控系统客流统计检测算法

在当今数据驱动的时代&#xff0c;客流统计作为商业分析的重要手段&#xff0c;其准确性和实时性对于商家决策具有至关重要的影响。随着技术的发展&#xff0c;智能边缘分析一体机结合了边缘计算与深度学习技术&#xff0c;为客流统计提供了更为高效、精准的解决方案。 首先&am…

美容师有什么话术技巧?美业人如何提升自己的销售技巧?博弈美业门店管理系统分享经验

作为一名美容师&#xff0c;有一些话术和销售技巧可以帮助你提升服务质量和销售业绩。以下是博弈美业收银系统分享的一些建议&#xff1a; 1.建立信任&#xff1a; 在与客户交流时&#xff0c;表现出真诚、友好和专业的态度。倾听客户的需求&#xff0c;并给予针对性的建议&a…

跟我练习100道FPGA入门题目~(2/100)

难度指数&#xff1a;一颗星 关键词&#xff1a;组合逻辑、入门基础 点击此处直接答题&#xff1a;F学社-全球FPGA技术提升平台 (zzfpga.com) 提交代码就能看到波形图和电路图啦&#xff01; &#xff08;在社区加入群聊&#xff0c;更多学友等着和你探讨~&#xff09;

CTF-PWN-kernel-前置

文章目录 打包上传测试脚本检查保护调试脚本编写Intel Syntax特点:示例: AT&T Syntax特点:示例: 对比总结 c库中asm的汇编 用到啥更新啥&#xff0c;一直更新ing 打包上传测试脚本 #!/bin/sh gcc expolit.c -static -masmintel -g -o expolit mv expolit fs/ cd core find…

淮北在选择SCADA系统时,哪些因素会影响其稳定性?

关键字:LP-SCADA系统, 传感器可视化, 设备可视化, 独立SPC系统, 智能仪表系统,SPC可视化,独立SPC系统 在选择SCADA系统时&#xff0c;稳定性是一个关键因素&#xff0c;因为它直接影响到生产过程的连续性和安全性。以下是一些影响SCADA系统稳定性的因素&#xff1a; 硬件质量…

微服务-初级篇

微服务-初级篇 认识微服务1.1 单体架构1.2 分布式架构1.3 微服务 SpringCloud2.1 了解2.2 服务拆分原则2.3 服务拆分效果 Nacos注册中心3.1 认识和安装Nacos3.1.1 Nacos下载3.1.2 Nacos安装 3.2 服务注册到Nacos Feign远程调用4.1 Feign引入4.2 Feign配置 认识微服务 1.1 单体…

如何利用java依赖jave-all-deps实现视频格式转换

视频格式转换是常见的需求&#xff0c;通过使用Java依赖库jave-all-deps可以实现视频格式的转换。本文将详细介绍在Java中如何利用jave-all-deps实现视频格式转换。 什么是jave-all-deps库&#xff1f; jave-all-deps是一款基于FFmpeg库的Java音视频编解码库。它提供了一系列AP…

java 实现人脸特征提取和比对

特征提取 1. 安装必要的库 确保你已经安装了JPEG库、BLAS和LAPACK库。在Ubuntu或Debian系统上&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-get update sudo apt-get update sudo apt-get install build-essential cmake sudo apt-get install libgtk-3-dev sud…

【C语言】标识符大通关!

目录 1. 简介2. 标识符的定义3. 标识符的命名规则3.1 有效字符3.2 长度限制 4. 关键字与保留字5. 标识符的作用域5.1 块作用域5.2 文件作用域5.3 函数作用域5.4 原型作用域 6. 命名规范与最佳实践6.1 命名习惯6.2 避免冲突 7. 标识符示例与解析8. 参考文献9. 结束语 1. 简介 标…

Zynq系列FPGA实现SDI视频编解码+UDP以太网传输,基于GTX高速接口,提供3套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本博已有的以太网方案本博已有的FPGA图像缩放方案1G/2.5G Ethernet PCS/PMA or SGMII架构以太网通信方案AXI 1G/2.5G Ethernet Subsystem架构以太网通信方案本方案的缩放应用本方案在Xilinx--Kintex系列…