23. Merge k Sorted Lists
題目網址:https://leetcode.cn/problems/merge-k-sorted-lists/
題意:給一 linked list array
lists
, 每個 linked list 都已按照升序排列。將所有 linked list 合併成一個升序的 linked list, 並返回合併後的 linked list。
Solution 1:
想法:利用 Heap 來紀錄所有 linked list 當前的
node.val
, 每次取 heap 中最小的 nodecur
, 並加到新的 linked list 中。若cur->next
不為 null, 則將其加到 heap 中(能這樣做是因為每個 linked list 皆已排序過)
class Solution { |
- time:$O(nk \cdot log(k))$
- 假設每個 linked list 的平均長度為
n
, 總共k
個 linked list - $O(nk)$ : 總共有 $n \cdot k$ 個 node
- $O(log(k))$ : heap 中的元素不超過
k
個, 因此每 insert / delete 一個 node 需花 $O(log(k))$
- 假設每個 linked list 的平均長度為
- space:$O(k)$ ➔ heap 中的元素不超過
k
Solution 2:
想法:利用 merge sort, 類似 21. Merge Two Sorted Lists, 只是變成合併
k
個 list
class Solution { |
- space:$O(nk \cdot log(k))$
- 假設每個 linked list 的平均長度為
n
, 總共k
個 linked list - $O(log(k))$ : $\dfrac{k}{2^x} = 1$ ➔ $x = log(k)$ = 層數
- $O(nk)$ : 共 $n \cdot k$ 個 node, worse case : 每個 node 皆被拜訪 $log(k)$ 次(每一層最多拜訪一次)
- 假設每個 linked list 的平均長度為
- space:$O(n \cdot k)$ ➔
newLists
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論