// 合并k个有序链表, 使用优先队列进行优化,复杂度kn * logk
// 熟练掌握java自定义比较器, 也可用lambda表达式
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if (lists == null || lists.length == 0) return null;
ListNode dummy = new ListNode();
PriorityQueue<ListNode> que = new PriorityQueue<>(lists.length, new Comparator<ListNode>(){
public int compare(ListNode a, ListNode b) {
return a.val - b.val;
}
});
// PriorityQueue<ListNode> que = new PriorityQueue<>(lists.length, (a, b) -> (a.val - b.val));
for (ListNode list : lists) {
if (list != null)
que.add(list);
}
ListNode p = dummy;
while(!que.isEmpty()) {
ListNode now = que.poll();
p.next = now;
if (now.next != null)
que.add(now.next);
p = p.next;
}
return dummy.next;
}
}
LeetCode 23 合并k个排序链表 优先队列堆优化
最新推荐文章于 2022-07-09 15:33:33 发布