LeetCode-23
Merge k Sorted Lists : You are given an array of k linked-lists lists, each linked-list is sorted in ascending order.
note : Merge all the linked-lists into one sorted linked-list and return it.
MyAnswer
:::python
# Definition for singly-linked list.
# class ListNode:
# def init(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeKLists(self, lists: List[Optional[ListNode]]) -> Optional[ListNode]:
root = result = ListNode(None)
heap = []
for i in range(len(lists)):
if lists[i]:
heapq.heappush(heap, (lists[i].val, i, lists[i]))
while heap:
node = heapq.heappop(heap)
idx = node[1]
result.next = node[2]
result = result.next
if result.next:
heapq.heappush(heap, (result.next.val, idx, result.next))
return root.next
Result : 97ms Memory: 17.9mb
## Merge k Sorted Lists๋?Merge k Sorted Lists๋ k๊ฐ์ ์ ๋ ฌ๋ linked list๋ฅผ ํ๋๋ก ๋ณํฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ํจ์จ์ ์ผ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฆฌ์คํธ๋ก ํตํฉํ ์ ์์ต๋๋ค.
Merge k Sorted Lists ์๊ณ ๋ฆฌ์ฆ์ ์๋ ๋ฐฉ์
- k๊ฐ์ ์ ๋ ฌ๋ linked list ์์ฑ
- list์ ๊ฐ element๋ฅผ ์๋ง๊ฒ ๋น๊ตํ์ฌ ์ ํฉํ ์์น์ ์ฝ์
- ํฉ์ณ์ง ๋ฆฌ์คํธ๋ฅผ ๋ฐํ
์ด ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐ ๋ณต์ก๋๋ O(nlogk)์ ๋๋ค. ์ด๋ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํด ๊ฐ ๋ฆฌ์คํธ์์ ๊ธฐ๋๋๋ ๊ฐ์ฅ ์ต์๊ฐ์ ํ์ํ๊ณ , ๊ทธ ์ค ์ต์๊ฐ์ ์ฐพ์ ์ถ๋ ฅ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์ ์ฝ์ ํ๋ ๋ฐฉ์์ ๋๋ค.
Merge k Sorted Lists ์๊ณ ๋ฆฌ์ฆ์ ์ฅ๋จ์
์ฅ์
- ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ํฉ์น ์ ์์ต๋๋ค.
- ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค.
- ์ ์ฐํ ์ฌ์ฉ ๊ฐ๋ฅ
๋จ์
- ์ ๋ ฌ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ด ํ๋ฝํฉ๋๋ค.
- ์ ๋ ฅ๊ฐ k๊ฐ ํฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํฉ๋๋ค.
Merge k Sorted Lists์ ํ์ฉ ๋ฐฉ์
Merge k Sorted Lists๋ ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณํฉํด์ผ ํ๋ ๋ค์ํ ๋ฌธ์ ์ ๋ํด ํจ๊ณผ์ ์ธ ํด๊ฒฐ์ฑ ์ ๋๋ค. ์ฌ์ฉ์๋ก๋ ๋งค์ฐ ๋ค์ํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ต์ ํ ๋ฌธ์ , ๋น ๋ฐ์ดํฐ ๋ถ์, ์์ฐ์ด ์ฒ๋ฆฌ ๋ฑ์ ๋ถ์ผ์์ ํ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์์ฝ
Merge k Sorted Lists๋ k๊ฐ์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ฅผ ํ๋๋ก ๋ณํฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ํจ์จ์ ์ผ๋ก ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ๋ฆฌ์คํธ๋ก ํตํฉํ ์ ์์ต๋๋ค. ์๊ฐ๋ณต์ก๋๋ O(nlogk)๋ก, ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํด ๊ฐ ๋ฆฌ์คํธ์์ ๊ธฐ๋๊ฐ์ ์ฐพ์ ์ถ๋ ฅ ๋ฆฌ์คํธ์ ๋น ๋ฅด๊ฒ ์ถ๊ฐํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๋๋ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
'๐ข One step' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[leetcode-4] Median of Two Sorted Arrays (0) | 2023.04.14 |
---|---|
[leetcode-3] Longest Substring Without Repeating Characters (0) | 2023.04.14 |
[leetcode-641] Design Circular Deque (0) | 2023.04.08 |
[leetcode-622] Design Circular Queue (0) | 2023.04.07 |
[leetcode-232] Implement Queue using Stacks (0) | 2023.04.06 |