Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 50af881

Browse files
committedOct 19, 2024
feat: solve DaleStudy#286 in python
1 parent 0a669d5 commit 50af881

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
 

‎merge-k-sorted-lists/EGON.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from heapq import heappush, heappop
2+
from typing import List, Optional
3+
from unittest import TestCase, main
4+
5+
6+
class ListNode:
7+
def __init__(self, val=0, next=None):
8+
self.val = val
9+
self.next = next
10+
11+
12+
class Solution:
13+
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
14+
return self.solve_priority_queue(lists)
15+
16+
"""
17+
Runtime: 7 ms (Beats 100.00%)
18+
Time Complexity: O(n * m)
19+
- lists의 길이 k만큼 조회에 O(k)
20+
- 힙의 크기가 최대 k이므로, heappush에 * O(log k)
21+
- heap의 크기는 최대 k이므로,
22+
- heappop하는데 O(k * log k)
23+
- heappush하는데 lists를 이루는 list를 이루는 모든 원소들의 총 갯수를 n이라 하면, O(n * log k)
24+
> O(k * log k) + O(k * log k) + O(n * log k) ~= O(max(k, n) * log k) = O(n * log k)
25+
26+
Memory: 19.44 MB (Beats 58.42%)
27+
Space Complexity: O(k)
28+
> heap의 크기는 lists의 길이 k에 비례하므로, O(k)
29+
"""
30+
def solve_priority_queue(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
31+
root = result = ListNode(None)
32+
heap = []
33+
34+
for i in range(len(lists)):
35+
if lists[i]:
36+
heappush(heap, (lists[i].val, i, lists[i]))
37+
38+
while heap:
39+
node = heappop(heap)
40+
_, idx, result.next = node
41+
42+
result = result.next
43+
if result.next:
44+
heappush(heap, (result.next.val, idx, result.next))
45+
46+
return root.next
47+
48+
49+
class _LeetCodeTestCases(TestCase):
50+
def test_1(self):
51+
self.assertEqual(True, True)
52+
53+
54+
if __name__ == '__main__':
55+
main()

0 commit comments

Comments
 (0)
Please sign in to comment.