mirror of
https://github.com/prdlk/leetcode.git
synced 2026-09-16 23:16:26 +00:00
feat(work): add solution for LeetCode 23 Merge k Sorted Lists
This commit is contained in:
@@ -0,0 +1,87 @@
|
|||||||
|
"""
|
||||||
|
23. Merge k Sorted Lists
|
||||||
|
Difficulty: Hard
|
||||||
|
https://leetcode.com/problems/merge-k-sorted-lists/
|
||||||
|
|
||||||
|
──────────────────────────────────────────────────
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
Input: lists = [[1,4,5],[1,3,4],[2,6]]
|
||||||
|
Output: [1,1,2,3,4,4,5,6]
|
||||||
|
Explanation: The linked-lists are:
|
||||||
|
[
|
||||||
|
1->4->5,
|
||||||
|
1->3->4,
|
||||||
|
2->6
|
||||||
|
]
|
||||||
|
merging them into one sorted linked list:
|
||||||
|
1->1->2->3->4->4->5->6
|
||||||
|
|
||||||
|
Example 2:
|
||||||
|
|
||||||
|
Input: lists = []
|
||||||
|
Output: []
|
||||||
|
|
||||||
|
Example 3:
|
||||||
|
|
||||||
|
Input: lists = [[]]
|
||||||
|
Output: []
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Constraints:
|
||||||
|
|
||||||
|
• k == lists.length
|
||||||
|
|
||||||
|
• 0 <= k <= 10^4
|
||||||
|
|
||||||
|
• 0 <= lists[i].length <= 500
|
||||||
|
|
||||||
|
• -10^4 <= lists[i][j] <= 10^4
|
||||||
|
|
||||||
|
• lists[i] is sorted in ascending order.
|
||||||
|
|
||||||
|
• The sum of lists[i].length will not exceed 10^4.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Definition for singly-linked list.
|
||||||
|
# class ListNode:
|
||||||
|
# def __init__(self, val=0, next=None):
|
||||||
|
# self.val = val
|
||||||
|
# self.next = next
|
||||||
|
import heapq
|
||||||
|
|
||||||
|
|
||||||
|
class Solution:
|
||||||
|
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
|
||||||
|
heap = []
|
||||||
|
|
||||||
|
# K log K
|
||||||
|
for i, node in enumerate(lists):
|
||||||
|
if node:
|
||||||
|
heapq.heappush(heap, (node.val, i, node))
|
||||||
|
|
||||||
|
D = ListNode()
|
||||||
|
cur = D
|
||||||
|
|
||||||
|
# n log k
|
||||||
|
while heap:
|
||||||
|
val, i, node = heapq.heappop(heap)
|
||||||
|
cur.next = node
|
||||||
|
cur = node
|
||||||
|
node = node.next
|
||||||
|
|
||||||
|
if node:
|
||||||
|
heapq.heappush(heap, (node.val, i, node))
|
||||||
|
|
||||||
|
# Time: O(N log k)
|
||||||
|
# Space: O(n)
|
||||||
|
return D.next
|
||||||
Reference in New Issue
Block a user