当前位置:网站首页>Leetcode 23. 合并K个升序链表
Leetcode 23. 合并K个升序链表
2022-07-04 07:41:00 【von Libniz】
题目链接:https://leetcode.cn/problems/merge-k-sorted-lists/
题目描述
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1->4->5,
1->3->4,
2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6
示例 2:
输入:lists = []
输出:[]
示例 3:
输入:lists = [[]]
输出:[]
这题显然是数组k路归并的扩展,而数组k路归并存在三种解法(假设k路数组的所有元素数为n):
(1)k路数组拷贝至同一数组,再统一排序
(2)k路数组进行k次归并
(3)使用最小堆,依次从k个数组中找到最小值,重复n次
而这题把数组换成了链表,那使用第三种方法是比较合适的。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
if not lists:
return None
k = len(lists)
dummy = ListNode(val=-1)
tail = dummy
heap = []
# put each list head to min heap
for i, node in enumerate(lists):
if node is not None:
heap.append((node.val, i, node)) # 当val相同通过link_index:i比较
heapq.heapify(heap)
# find min node n times
while len(heap) > 0:
_, idx, cur_node = heapq.heappop(heap)
tail.next = cur_node
tail = cur_node
if cur_node.next is not None:
heapq.heappush(heap, (cur_node.next.val, idx, cur_node.next))
return dummy.next
边栏推荐
- The IP bound to the socket is inaddr_ The meaning of any htonl (inaddr_any) (0.0.0.0 all addresses, uncertain addresses, arbitrary addresses)
- 线性代数1.1
- 2022-021ARTS:下半年開始
- zabbix監控系統自定義監控內容
- 墨者学院-phpMyAdmin后台文件包含分析溯源
- The text box displays the word (prompt text) by default, and the text disappears after clicking.
- MYCAT middleware installation and use
- Text processing function sorting in mysql, quick search of collection
- How to buy financial products in 2022?
- L1-023 output gplt (20 points)
猜你喜欢

There is no Chinese prompt below when inputting text in win10 Microsoft Pinyin input method

It's healthy to drink medicinal wine like this. Are you drinking it right

This monitoring system can monitor the turnover intention and fishing all, and the product page has 404 after the dispute appears

提升复杂场景三维重建精度 | 基于PaddleSeg分割无人机遥感影像

Xcode 14之大变化详细介绍

Implementation of ZABBIX agent active mode

Preliminary study on temporal database incluxdb 2.2

Oracle stored procedures and functions

JVM中堆概念

zabbix监控系统邮件报警配置
随机推荐
提升复杂场景三维重建精度 | 基于PaddleSeg分割无人机遥感影像
Introduction to rce in attack and defense world
How to reset IntelliSense in vs Code- How to reset intellisense in VS Code?
Zephyr study notes 2, scheduling
Activiti常见操作数据表关系
【FreeRTOS】FreeRTOS学习笔记(7)— 手写FreeRTOS双向链表/源码分析
线性代数1.1
L1-023 output gplt (20 points)
rapidjson读写json文件
Book list | as the technical support Party of the Winter Olympics, Alibaba cloud's technology is written in these books!
BUUCTF(3)
21 examples of strategic goals to promote the rapid development of your company
Docker install MySQL
促进OKR落地的工作总结该如何写?
在所有SwiftUI版本(1.0-4.0)中原生实现Charts图表视图之思路
[network security] what is emergency response? What indicators should you pay attention to in emergency response?
zabbix监控系统邮件报警配置
深入浅出:了解时序数据库 InfluxDB
Google's official response: we have not given up tensorflow and will develop side by side with Jax in the future
Zephyr Learning note 2, Scheduling