public class Solution {
//优先队列:时间复杂度:O(kn*logk) 空间:O(k)
public ListNode mergeKLists(ListNode[] lists) {
PriorityQueue<ListNode> minHeap = new PriorityQueue<>((n1, n2)->n1.val - n2.val); //小根堆
for(ListNode list : lists) {
if(list!=null) {
minHeap.offer(list);
}
}
ListNode dummy = new ListNode(-1), cur = dummy;//辅助节点
while(!minHeap.isEmpty()) {
ListNode t = minHeap.poll();
cur.next = t;
if(t.next!=null) minHeap.offer(t.next);
cur = cur.next;
}
return dummy.next;
}
//merge sort to slove this question
//分治合并 时间复杂度:O(kn*logk) 空间:O(logk)
public ListNode mergeKLists1(ListNode[] lists) {
return partion(lists, 0, lists.length - 1);
}
private ListNode partion(ListNode[] lists, int st, int ed) {
23. 合并K个排序链表
这篇博客探讨了如何有效地合并多个已经排序的链表,以创建一个单一的排序链表。通过介绍不同的合并策略和算法,文章深入浅出地讲解了合并过程中的关键步骤和优化技巧。
摘要由CSDN通过智能技术生成