太久没刷题自闭了爬上来记录下

【题目】

将K个顺序排列的列表合并,输出合并后的列表

Example 1:

Input: lists = [[1,4,5],[1,3,4],[2,6]]
Output: [1,1,2,3,4,4,5,6]
Explanation: The linked-lists are:
[
  1->4->5,
  1->3->4,
  2->6
]
merging them into one sorted list:
1->1->2->3->4->4->5->6

Example 2:

Input: lists = []
Output: []

Example 3:

Input: lists = [[]]
Output: []

【思路】

有几种方法,一是可用PriorityQueue重新排列(图B站相关介绍)

 

PriorityQueue根据优先级排列值,默认倒序 大的在前。而此题中需要顺序排列,要重新定义优先级,但此时PriorityQueue只会比较list的首位元素大小。

 

【代码】

class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        PriorityQueue<ListNode> tmp=new PriorityQueue<>((a,b)->a.val-b.val);
        for(ListNode list:lists){
             if(list != null)
                 tmp.add(list);
        }
        
        ListNode setA=new ListNode(-12345);//为了表示这个值没用
        ListNode setB=setA;//setB指向setA
        
        while(!tmp.isEmpty()){
            setA.next=tmp.poll();
            setA=setA.next;
        
            if(setA.next != null)
                tmp.add(setA.next);//把list的后位元素添加
        }
        return setB.next;
    }
}

过程

 

 

 

 
 posted on 2021-02-19 22:31  alau  阅读(83)  评论(0编辑  收藏  举报