1. 程式人生 > 其它 >關係運算符和邏輯運算子

關係運算符和邏輯運算子

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