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