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->null

Example 2

Input: [2->6->null, 5->null, 7->null]
Output: 2->5->6->7->null

Example 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的合并过程。

改进方法:

  1. 使用merge sort中的二分的思维,将包含k个链表的列表逐次分成两个部分,再逐次对两个链表合并,这样就有 log(k)次合并过程,每次均使用merge two sorted lists的算法。时间复杂度O(nlog(k)),不需要额外空间,因此空间复杂度O(1)。

  2. 使用Priority Queues。这样保持每次取出的节点中是当前最小的,依次加入新的链表,从而得到合并的结果。时间复杂度O(nlogk),空间复杂度O(k) 是PriorityQueue的空间。

源代码

  • Divide and Conquer

  • Divide & Conquer Another implementation

  • Heap*

Last updated

Was this helpful?