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; } }