mirror of
https://github.com/prdlk/leetcode.git
synced 2026-09-16 23:16:26 +00:00
docs(docs): add MDX page for Merge k Sorted Lists problem
This commit is contained in:
@@ -0,0 +1,69 @@
|
|||||||
|
---
|
||||||
|
title: '23. Merge k Sorted Lists'
|
||||||
|
description: You are given an array of k linked-lists lists, each linked-list is sorted in ascending order
|
||||||
|
sidebar:
|
||||||
|
label: 'Merge k Sorted Lists'
|
||||||
|
badge: 'Hard'
|
||||||
|
---
|
||||||
|
|
||||||
|
<Badge variant="accent">Heap / Priority Queue</Badge>
|
||||||
|
|
||||||
|
### 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.
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
|
||||||
|
```py
|
||||||
|
# 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