23. Merge k Sorted Lists
来源:互联网 发布:网易我的世界java路径 编辑:程序博客网 时间:2024/05/19 14:38
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
用优先级队列做的
public ListNode mergeKLists(ListNode[] lists) { PriorityQueue<ListNode> queue = new PriorityQueue<ListNode>(new Comparator<ListNode>() { @Override public int compare(ListNode o1, ListNode o2) { return o1.val - o2.val; } }); for (ListNode head : lists){ if (head != null) queue.add(head); } ListNode dummy = new ListNode(-1); ListNode head = dummy; while (!queue.isEmpty()){ ListNode node = queue.poll(); head.next = new ListNode(node.val); head = head.next; node = node.next; if (node == null) continue; queue.add(node); } return dummy.next; }
解出来了 但是时间复杂度需要知道 正好solution里面有对于这种解法的分析
Complexity Analysis
- Time complexity : O(Nlogk) where k is the number of linked lists.
- The comparison cost will be reduced to O(logk) for every pop and insertion to priority queue. But finding the node with the smallest value just costs O(1) time.
- There are N nodes in the final linked list.
- Space complexity :
- O(n) Creating a new linked list costs O(n) space.
- O(k) The code above present applies in-place method which cost O(1) space. And the priority queue (often implemented with heaps) costs O(k) space (it's far less than N in most situations).
时间复杂度O(Nlogk)的还有下面这种
Intuition & Algorithm
Pair up k lists and merge each pair.
After the first pairing, k lists are merged into k/2 lists with average 2N/k length, then k/4k/4, k/8k/8 and so on.
Repeat this procedure until we get the final sorted linked list.
Thus, we'll traverse almost N nodes per pairing and merging, and repeat this procedure about logk times.
图片来源:https://leetcode.com/problems/merge-k-sorted-lists/solution/
描述和图片已经非常直观了 就不详细说了 上代码
class Solution(object): def mergeKLists(self, lists): """ :type lists: List[ListNode] :rtype: ListNode """ amount = len(lists) interval = 1 while interval < amount: for i in range(0, amount - interval, interval * 2): lists[i] = self.merge2Lists(lists[i], lists[i + interval]) interval *= 2 return lists[0] if amount > 0 else lists def merge2Lists(self, l1, l2): head = point = ListNode(0) while l1 and l2: if l1.val <= l2.val: point.next = l1 l1 = l1.next else: point.next = l2 l2 = l1 l1 = point.next.next point = point.next if not l1: point.next=l2 else: point.next=l1 return head.next
Time complexity : O(Nlog k) where k is the number of linked lists.
We can merge two sorted linked list in O(n) time where n is the total number of nodes in two lists.
Space complexity : O(1)
We can merge two sorted linked lists in O(1) space.
相对于priority queue解法的空间复杂度O(n), 这个空间复杂度只有O(1),是最佳 阅读全文
0 0
- 23. Merge k Sorted Lists
- 23.Merge K Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23.Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23.Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 23. Merge k Sorted Lists
- 深入理解Java内存模型(一)——基础
- 【第1116期】前端需要了解的 SSO 与 CAS 知识
- 《大话设计模式》java实现之单例模式
- Oracle Spacial(空间数据库)空间关系和条件
- 设计及封装无限层级的树状结构
- 23. Merge k Sorted Lists
- 深入理解Java内存模型(二)——重排序
- iOS Swift创建UITabBarController
- 数据结构学习(一)
- 解决Could not publish server configuration for Tomcat v7.0 Server at localhost.的方法
- c语言线性表的链式表示和实现
- Science:最新发现哈希可能是大脑的通用计算原理!
- 因 AI 而倍受追捧的的5种职业!
- 陈信教育公社各地分社社长招募计划