zoukankan      html  css  js  c++  java
  • 23. Merge k Sorted Lists (JAVA)

    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
    
     
    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public ListNode mergeKLists(ListNode[] lists) {
            if(lists == null || lists.length == 0)  //pay attention to null
                return null;
            
            ListNode head = null;
            ListNode cur = head; //cur.next point to the node to give value
            PriorityQueue<ListNode> minHeap = new PriorityQueue<>(lists.length,
                new Comparator<ListNode>(){ //小顶堆,默认容量11,这里改为列表长度
                @Override
                public int compare(ListNode n1, ListNode n2){
                    return n1.val - n2.val;
                }
            });
            
            for(ListNode n: lists){
                if(n!=null) minHeap.add(n); //pay attention to null
            }
            
            while(minHeap.size()>0){
                //pop
                if(head==null){
                    head = minHeap.poll();
                    cur = head;
                }
                else{
                    cur.next = minHeap.poll();
                    cur = cur.next;
                }
                
                //push
                if(cur.next != null){
                    minHeap.add(cur.next);
                }
            }
            return head;
        }
    }

    PriorityQueue是通过小顶堆实现的,如果要使用大顶堆,那么需要自定义Comparator函数。

    List问题特别注意:需要额外讨论null的情况,比如本题中,需要保证PriorityQueue不能加入null元素。

  • 相关阅读:
    Linux下安装JDK
    Flink源码阅读(五)——Flink中任务相关的核心类简析
    使用CloudFlare Worker 来免费部署 JSProxy 服务
    Nginx:进程调度
    Javassist基本用法汇总
    IO
    IO
    springcloud3(五) spring cloud gateway动态路由的四类实现方式
    架构设计(二) 互联网网关平台对比
    Python 的协程
  • 原文地址:https://www.cnblogs.com/qionglouyuyu/p/10775700.html
Copyright © 2011-2022 走看看