马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
LeetCode 热题 23:归并 K 个升序链表(详细解析)
标题描述
LeetCode 23. Merge k Sorted Lists
给你一个链表数组,每个链表都已经按升序分列。
请你将所有链表归并到一个升序链表中,返回归并后的链表。
<hr> 示例 1:
- 输入:lists = [[1,4,5],[1,3,4],[2,6]]
- 输出:[1,1,2,3,4,4,5,6]
复制代码 示例 2:
示例 3:
<hr> 解题思绪一:优先队列(最小堆)
利用最小堆(Priority Queue)维护 k 个链表的头节点,每次取堆顶最小值节点,接入结果链表。
✅ 步调解析
- 初始化最小堆,将每个非空链表的头节点入堆。
- 不停从堆中弹出最小值节点,将其参加结果链表。
- 如果弹出的节点有 next 节点,则将 next 节点入堆。
- 最后返回结果链表头部。
<hr> Go 实现(利用 heap 接口)
- type ListNode struct {
-
- Val int
- Next *ListNode
- }
- type NodeHeap []*ListNode
- func (h NodeHeap) Len() int {
- return len(h) }
- func (h NodeHeap) Less(i, j int) bool {
- return h[i].Val < h[j].Val }
- func (h NodeHeap) Swap(i, j int) {
- h[i], h[j] = h[j], h[i] }
- func (h *NodeHeap) Push(x interface{
-
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |