题目地址:Merge k Sorted Lists - LeetCode


Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

Example:

Input:
[1->4->5,1->3->4,2->6
]
Output: 1->1->2->3->4->4->5->6

这道题目是经典的对K个有序链表进行合并,可以使用最小堆或者说优先队列。

如果采用暴力的方法,也就是把所有节点加入数组,排序,那么时间复杂度是O(NlogN)。

采用最小堆的时间复杂度是O(NlogK)。

Python解法如下:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Nonefrom queue import PriorityQueue
class Solution:def mergeKLists(self, lists: list) -> ListNode:dummy = ListNode(None)curr = dummyq = PriorityQueue()for node in lists:if node: q.put((node.val,id(node),node))while q.qsize()>0:curr.next = q.get()[2]curr=curr.nextif curr.next: q.put((curr.next.val,id(curr.next), curr.next))return dummy.next

如果采用分治法,时间复杂度相同。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
from queue import PriorityQueue
class Solution:def mergeKLists(self, lists: List[ListNode]) -> ListNode:amount = len(lists)interval = 1while interval < amount:for i in range(0, amount - interval, interval * 2):lists[i] = self.merge2Lists(lists[i], lists[i + interval])interval *= 2return lists[0] if amount > 0 else listsdef merge2Lists(self, l1, l2):head = point = ListNode(0)while l1 and l2:if l1.val <= l2.val:point.next = l1l1 = l1.nextelse:point.next = l2l2 = l1l1 = point.next.nextpoint = point.nextif not l1:point.next=l2else:point.next=l1return head.next

LeetCode 23. Merge k Sorted Lists--Python解法--优先队列,分治法相关推荐

  1. 合并k个有序链表 python_[LeetCode] 23. Merge k Sorted Lists 合并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ...

  2. LeetCode 23. Merge k Sorted Lists

    解法一:Priority Queue 优先队列实际是对每次对list头结点依次比较排序的一种优化.插入和删除时间复杂度都为O(logk).一共n个数的话总共是O(nlogk). 复习一下优先队列的写法 ...

  3. 21.Merge Two Sorted Lists 、23. Merge k Sorted Lists

    21.Merge Two Sorted Lists 初始化一个指针作为开头,然后返回这个指针的next class Solution { public:ListNode* mergeTwoLists( ...

  4. 23 Merge k Sorted Lists

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 3 ...

  5. Python 解LeetCode:23. Merge k Sorted Lists

    题目描述:把k个排序的链表组成的列表合并成一个排序的链表 思路: 使用堆排序,遍历列表,把每个列表中链表的头指针的值和头指针本身作为一个元素放在堆中: 第一步中遍历完列表后,此时堆中最多会有n个元素, ...

  6. LeetCode 之 JavaScript 解答第23题 —— 合并K个有序链表(Merge K Sorted Lists)

    Time:2019/4/10 Title: Merge K Sorted Lists Difficulty: Difficulty Author: 小鹿 题目:Merge K Sorted Lists ...

  7. 71. Merge k Sorted Lists

    Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and descr ...

  8. Merge k Sorted Lists leetcode java

    题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...

  9. [leetcode] Merge k Sorted Lists

    2019独角兽企业重金招聘Python工程师标准>>> Merge k sorted linked lists and return it as one sorted list. A ...

最新文章

  1. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin
  2. php类退出魔术方法,php类中常用的魔术方法
  3. jMonkey Engine SDK3 中文乱码问题
  4. python课程水平测试成绩查询_学业水平测试成绩查询
  5. Fabricjs对Canvas画布和对象的事件监听
  6. git远程代码回滚_【GIT】git 删除本地分支和远程分支、本地代码回滚和远程代码库回滚...
  7. 如何在python中安装matplotlib模块_Windows下为Python安装Matplotlib模块
  8. go语言io reader_Go语言中的io.Reader和io.Writer以及它们的实现
  9. designer pyqt5 界面切换_PyQT5堆叠布局:切换界面(QStackedLayout)
  10. 数组去重和两个数组求交集
  11. saber仿真软件_返场预订,视频课程丨开关电源环路补偿设计与仿真
  12. 没有USB 如何通过adb连接手机设备
  13. Sallen-Key 低通滤波器设计过程
  14. SNMP原理和MIB库
  15. Hongda -接小球游戏
  16. 牛客 F - 爬塔 (分组背包)
  17. OSS图片服务域名与bucket绑定域名的区别
  18. FICO 发票校验时修改统驭科目
  19. iPhone 一键打开北京健康宝
  20. JavaScript处理大数问题

热门文章

  1. k-median聚类算法【基本概念篇】
  2. 数据处理压力中的自我拯救
  3. “昊论坛”热力来袭!一网打尽【微生物绝对定量】技术特色和应用
  4. QIIME 2用户文档. 12训练特征分类器Training feature classifiers(2018.11)
  5. QIIME 2用户文档. 8数据导入Importing data(2018.11)
  6. pandas使用str函数和startswith函数,筛选dataframe中(start with)以特定前缀开头的数据列(selecting columns begin with certain
  7. R语言ggplot2可视化散点图并使用scale_y_log10函数配置Y轴对数坐标、使用ggforce包的facet_zoom函数将可视化结果中需要突出放大的区域进行放大(Zoom in)
  8. Seaborn可视化使用relplot函数可视化数据长度不同的时间序列实战:two Pandas Series of different lengths
  9. Python装饰器是什么?使用Python装饰器实现计算程序(函数)运行时间的功能
  10. R语言泊松回归(poisson)模型案例:基于robust包的Breslow癫痫数据集