You are given an array of k
linked-lists lists
, each linked-list is sorted in ascending order.
Merge all the linked-lists into one sorted linked-list and return it.
Example 1:
1 |
|
Example 2:
1 |
|
Constraints:
- k == lists.length
- 0 <= k <= 104
- 0 <= lists[i].length <= 500
- -104 <= lists[i][j] <= 104
- lists[i] is sorted in ascending order.
- The sum of lists[i].length will not exceed 104.
Related Topics: Linked List
Divide and Conquer
Heap (Priority Queue)
Merge Sort
解題邏輯與實作
之前有解過寫過一篇 0021. Merge Two Sorted Lists,這題就是它的進階。
我打算按照提示中的分而治之(Divide and Conquer)法與遞迴不斷將鏈結串列剖半對分,直到剩下一個或是兩個鏈結串列時,開始合併與回傳。
以長度為 6 的鏈結串列 [A, B, C, D, E, F] 為例,用遞迴去剖半對分的話最終會是 A、B 排,AB 排後再跟 C 排,再 D、E 排,DE 排後再跟 F 排,最後 ABC 與 DEF 再排一次,總共執行了 5 次。
1 |
|
Runtime 為 112 ms,Beats 是 78.87%。不過它效率比我想像中的還差。
因此我打算換個寫法試試,一樣是分而治之法,不過把它改成直接兩兩抓來做排序,就是 A、B 排、C、D 排、C、D 排:
1 |
|
效果出來出乎意料的不錯欸,Runtime 96 ms、Beats 95.64%。
偷看了下 70ms 的答案,因為它直接用 sort 難怪效能不錯 XDDD
1 |
|
其他連結
更新紀錄
最後更新日期:2023-02-15
- 2023-02-15 發布
- 2023-01-11 完稿
- 2023-01-11 起稿