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个排序链表
最新推荐文章于 2024-04-27 12:39:09 发布