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