0
点赞
收藏
分享

微信扫一扫

LeetCode_Sorting_23. Merge k Sorted Lists 合并K个升序链表【归并排序,优先队列】【java】【困难】


目录

​​一,题目描述​​

​​英文描述​​

​​中文描述​​

​​示例与说明​​

​​二,解题思路​​

​​三,AC代码​​

​​Java​​

​​四,解题过程​​

​​第一搏​​

一,题目描述

英文描述

You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.

Merge all the linked-lists into one sorted linked-list and return it.

中文描述

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例与说明

LeetCode_Sorting_23. Merge k Sorted Lists 合并K个升序链表【归并排序,优先队列】【java】【困难】_leetcode

LeetCode_Sorting_23. Merge k Sorted Lists 合并K个升序链表【归并排序,优先队列】【java】【困难】_多路归并_02

来源:力扣(LeetCode)
链接:​​​https://leetcode-cn.com/problems/merge-k-sorted-lists​​ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

二,解题思路

链表已经排好序了,只需要将他们合并即可,也就是归并排序中的多路合并,可以借助优先队列(小根堆)来选择每轮中的最小节点。

LeetCode_Sorting_23. Merge k Sorted Lists 合并K个升序链表【归并排序,优先队列】【java】【困难】_优先队列_03

三,AC代码

Java

class Solution {
public ListNode mergeKLists(ListNode[] lists) {
// 创建小根堆
PriorityQueue<ListNode> heap = new PriorityQueue<>(new Comparator<ListNode>() {
public int compare(ListNode a, ListNode b) {
return a.val - b.val;
}
});
for (int i = 0; i < lists.length; i++) {
if (lists[i] != null) {
heap.offer(lists[i]);
}
}
ListNode head = new ListNode(), p = head;
while (!heap.isEmpty()) {
ListNode node = heap.peek();
heap.poll();
if (node.next != null) {
heap.offer(node.next);
}
p.next = node;
p = p.next;
}
return head.next;
}
}

四,解题过程

第一搏

一发如魂。优先队列直接用现成的话,基本没什么难度了。

LeetCode_Sorting_23. Merge k Sorted Lists 合并K个升序链表【归并排序,优先队列】【java】【困难】_java_04

 

举报

相关推荐

0 条评论