Merge K Sorted Lists
Merge k Sorted Lists
Heap
Description
Leetcode: Merge k Sorted Lists | LeetCode OJ Lintcode: Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example
Example 1
Input: [2->4->null, null, -1->null]
Output: -1->2->4->nullExample 2
Input: [2->6->null, 5->null, 7->null]
Output: 2->5->6->7->nullExample 3
Input:
[
1->4->5,
1->3->4,
2->6
]
Output: 1->1->2->3->4->4->5->6题解思路
归并k个已排序链表,可以分解问题拆解成为,重复k次,归并2个已排序链表。不过这种方法会在LeetCode中TLE(超出时间限制)。总共需要k次merge two sorted lists的合并过程。
改进方法:
使用merge sort中的二分的思维,将包含k个链表的列表逐次分成两个部分,再逐次对两个链表合并,这样就有 log(k)次合并过程,每次均使用merge two sorted lists的算法。时间复杂度O(nlog(k)),不需要额外空间,因此空间复杂度O(1)。
使用Priority Queues。这样保持每次取出的节点中是当前最小的,依次加入新的链表,从而得到合并的结果。时间复杂度O(nlogk),空间复杂度O(k) 是PriorityQueue的空间。
源代码
Divide and Conquer
Divide & Conquer Another implementation
Heap*
Last updated
Was this helpful?