当前位置: 首页 > news >正文

南京企业建站系统深圳百度网站排名优化

南京企业建站系统,深圳百度网站排名优化,怎么介绍自己做的企业网站页面,重庆建设监理协会网站🚀 LeetCode 热题 23:合并 K 个升序链表(详细解析) 📌 题目描述 LeetCode 23. Merge k Sorted Lists 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合…

🚀 LeetCode 热题 23:合并 K 个升序链表(详细解析)

📌 题目描述

LeetCode 23. Merge k Sorted Lists

给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。


🎯 示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]

🎯 示例 2:

输入:lists = []
输出:[]

🎯 示例 3:

输入:lists = [[]]
输出:[]

💡 解题思路一:优先队列(最小堆)

使用最小堆(Priority Queue)维护 k 个链表的头节点,每次取堆顶最小值节点,接入结果链表。

✅ 步骤解析

  1. 初始化最小堆,将每个非空链表的头节点入堆。
  2. 不断从堆中弹出最小值节点,将其加入结果链表。
  3. 如果弹出的节点有 next 节点,则将 next 节点入堆。
  4. 最后返回结果链表头部。

💻 Go 实现(使用 heap 接口)

type ListNode struct {Val  intNext *ListNode
}type NodeHeap []*ListNodefunc (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{}) {*h = append(*h, x.(*ListNode))
}func (h *NodeHeap) Pop() interface{} {old := *hn := len(old)x := old[n-1]*h = old[0 : n-1]return x
}func mergeKLists(lists []*ListNode) *ListNode {h := &NodeHeap{}heap.Init(h)for _, node := range lists {if node != nil {heap.Push(h, node)}}dummy := &ListNode{}curr := dummyfor h.Len() > 0 {node := heap.Pop(h).(*ListNode)curr.Next = nodecurr = curr.Nextif node.Next != nil {heap.Push(h, node.Next)}}return dummy.Next
}

💡 解题思路二:分治合并(归并)

  • 将 k 个链表两两合并,逐步缩小范围。
  • 类似归并排序的思想。

✅ 步骤解析

  1. 每次将链表对半拆分,递归合并每一对链表。
  2. 使用合并两个有序链表的经典方法。

💻 Go 实现

func mergeKLists(lists []*ListNode) *ListNode {if len(lists) == 0 {return nil}return mergeRange(lists, 0, len(lists)-1)
}func mergeRange(lists []*ListNode, l, r int) *ListNode {if l == r {return lists[l]}mid := (l + r) / 2left := mergeRange(lists, l, mid)right := mergeRange(lists, mid+1, r)return mergeTwoLists(left, right)
}func mergeTwoLists(l1, l2 *ListNode) *ListNode {dummy := &ListNode{}curr := dummyfor l1 != nil && l2 != nil {if l1.Val < l2.Val {curr.Next = l1l1 = l1.Next} else {curr.Next = l2l2 = l2.Next}curr = curr.Next}if l1 != nil {curr.Next = l1} else {curr.Next = l2}return dummy.Next
}

📊 解法对比 & 复杂度分析

解法时间复杂度空间复杂度特点说明
✅ 最小堆 O ( n log ⁡ k ) O(n \log k) O(nlogk) O ( k ) O(k) O(k)快速选择当前最小节点
✅ 分治合并 O ( n log ⁡ k ) O(n \log k) O(nlogk) O ( log ⁡ k ) O(\log k) O(logk)简洁高效,适合面试常考套路
  • 其中, n n n 是所有链表节点总数, k k k 是链表数量。

🧠 总结

  • 🔧 如果要求效率,最小堆优先,适合在线合并场景。
  • 📚 如果偏向代码整洁,可选择分治合并,便于拓展与理解。
  • 💡 重点掌握:链表合并逻辑 + 堆操作 + 分治模板。

✅ 如果你觉得这篇文章对你有帮助,欢迎点赞 👍、收藏 ⭐、关注 💻,我会持续更新更多高质量 LeetCode 热题详解!🚀📌🎯


http://www.cadmedia.cn/news/5426.html

相关文章:

  • oa办公系统怎么注册汕头网站优化
  • 开发公司让员工顶名买房套取贷款上海关键词排名优化价格
  • 汽车销售网站建设推广哪些app最挣钱
  • 哈尔滨制作网站企业郑州网站网页设计
  • 好看的页面优化网络推广外包
  • 泰安建设信息网站google搜索关键词热度
  • 网站app怎么制作百度关键词自然排名优化公司
  • 二级分销什么是关键词排名优化
  • 建e网室内惠州seo招聘
  • 广州网络广告推广企业seo排名外包
  • 合肥企业网站营销电话百度手机浏览器
  • 国内二级域名免费申请windows优化大师怎么卸载
  • 全国免费发布广告信息平台seo排名哪家公司好
  • 长春集团网站建设广州百度推广电话
  • 网站建设销售是什么企业整站seo
  • 专门做中式服装平台的网站海南百度推广公司有哪些
  • 湖北天健建设集团有限公司网站做网站需要准备什么
  • 网站开发工程师应聘书范文1000html网页制作用什么软件
  • 门店库存管理软件爱站网seo工具
  • 前端用户中心 wordpressseo搜索优化待遇
  • 免费建站建站crm系统网站
  • 武汉网页定制公司seo干什么
  • 江油网站网站建设品牌软文
  • 网站排名查询平台免费发广告的网站
  • 石家庄网站建设方案咨询信阳网站seo
  • 网站推广排名收费标准网络营销专家
  • 今日足球比赛预测推荐分析深圳网站关键词优化推广
  • 呼和浩特建设厅官方网站什么是sem和seo
  • 如何将自己做的网页做成网站中国国家培训网
  • 珠海网站建设案例网站域名查询地址