LeetCode - Merge k Sorted Lists | Darren's Blog



Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
  • Priority Heap
public ListNode mergeKLists(ArrayList<ListNode> lists) {
    if (lists == null || lists.isEmpty())   // Empty lists
            return null;
    int k = lists.size();
    // Use a heap (priority queue) to process
    PriorityQueue<ListNode> heap = new PriorityQueue<ListNode>(k, new Comparator<ListNode>() {
        @Override
        public int compare(ListNode n1, ListNode n2) {
            return n1.val-n2.val;
        }
    });
    // Put the first (smallest) node into the heap
    for (ListNode node : lists) {
        if (node != null)
            heap.offer(node);
    }
 
    ListNode head = new ListNode(0), tail = head;   // Use a header to avoid boundary check
    // Put the smallest in the heap to the resulting list,
    // and add its next node (if any) to the heap
    while (!heap.isEmpty()) {
        ListNode temp = heap.poll();
        tail.next = temp;
        tail = tail.next;
        if (temp.next != null)
            heap.offer(temp.next);
    }
 
    return head.next;
Read full article from LeetCode - Merge k Sorted Lists | Darren's Blog

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts