23. 合并K个升序链表
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(nlogk) - k是链表的数量
空间O(n)
思路:最优解应该是用priority queue解决
优先队列默认是小根堆
存放的值要是可比较的类型
PriorityQueue<ListNode> queue=new PriorityQueue<>(lists.length,(a,b)->a.val-b.val); queue.add(new ListNode()); queue.poll queue.isEmpty()
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists==null||lists.length==0){
return null;
}
PriorityQueue<ListNode> minValQ=new PriorityQueue<>(lists.length,(a,b)->a.val-b.val);
for(ListNode node:lists){
if(node!=null){
minValQ.add(node);
}
}
ListNode dummy=new ListNode(0);
ListNode cur=dummy;
while(!minValQ.isEmpty()){
cur.next=minValQ.poll();
cur=cur.next;
if(cur.next!=null){
minValQ.add(cur.next);
}
}
return dummy.next;
}
}

浙公网安备 33010602011771号