LeetCode 23: Merge k Sorted Lists
来源:互联网 发布:淘宝上买东西不花钱 编辑:程序博客网 时间:2024/06/03 20:16
原题链接在此:https://leetcode.com/problems/merge-k-sorted-lists/#/description
这题是合并2个排序链表的扩展版。最容易想到的方法:为每个链表维护一个当前指针,每次对这k个指针指向的节点比较取最小节点,然后步进1次,这样时间复杂度是O(n * k * k)。
更好的办法是:在比较这里做优化,使用一个优先级队列存这k个节点,每次取最小节点时间为O(1),新节点入队列维护的时间为O(logk),这样时间复杂度降低到O(n * k * logk)。
public ListNode mergeKLists(ListNode[] lists) { PriorityQueue<ListNode> heap = new PriorityQueue<ListNode>(10, new Comparator<ListNode>(){ @Override public int compare(ListNode o1, ListNode o2) { return o1.val - o2.val; } }); for (ListNode n : lists) { if (n != null) heap.add(n); } ListNode head = null; ListNode prev = null; while (!heap.isEmpty()) { ListNode c = heap.poll(); if (head == null) { head = c; prev = c; } else { prev.next = c; prev = c; } ListNode next = c.next; if (next != null) heap.add(next); } return head; }
阅读全文
0 0
- LeetCode(23)Merge K Sorted Lists
- [leetcode 23] Merge k Sorted Lists
- [leetcode]23 Merge k Sorted Lists
- [#23 leetcode]Merge k Sorted Lists
- LeetCode 23 Merge k Sorted Lists
- leetcode 23 Merge k Sorted Lists
- [Leetcode 23, Hard] Merge k Sorted Lists
- Leetcode 23 Merge k Sorted Lists
- LeetCode 23 - Merge k Sorted Lists
- LeetCode 23: Merge K Sorted Lists
- leetcode-23Merge k Sorted Lists
- leetcode 23: Merge k Sorted Lists
- Leetcode 23 Merge k Sorted Lists
- LeetCode-23 Merge k Sorted Lists
- LeetCode 23: Merge k Sorted Lists
- leetcode 23:Merge k Sorted Lists
- Leetcode #23 Merge k Sorted Lists
- LeetCode(23)Merge k Sorted Lists
- D
- matlab常用函数
- 矩阵取数问题
- ubuntu14.04如何安装英伟达显卡驱动
- 闹钟AlarmManager和通知NotificationManager
- LeetCode 23: Merge k Sorted Lists
- 图的深度优先遍历(递归、非递归;邻接表,邻接矩阵)
- JAVA基础笔记01
- 旋转数组的最小数字
- 魔术方法
- sql 查出一张表中重复的所有记录数据
- Swift3.1 最新开启用户授权方法
- Php性能分析-xhprof
- python 生成器generator