[NeetCode 150] Merge K Sorted Linked Lists
创始人
2025-01-10 17:04:35
0

Merge K Sorted Linked Lists

You are given an array of k linked lists lists, where each list is sorted in ascending order.

Return the sorted linked list that is the result of merging all of the individual linked lists.

Example 1:

Input: lists = [[1,2,4],[1,3,5],[3,6]]  Output: [1,1,2,3,3,4,5,6] 

Example 2:

Input: lists = []  Output: [] 

Example 3:

Input: lists = [[]]  Output: [] 

Constraints:

0 <= lists.length <= 1000 0 <= lists[i].length <= 100 -1000 <= lists[i][j] <= 1000 

Solution

To take advantage of the feature that each list is sorted in ascending order, it is OK to use O ( number of elements in 2 lists ) O(\text{number of elements in 2 lists}) O(number of elements in 2 lists) two pointers method to merge 2 ordered lists. The overall time complexity will be O ( number of all elements × number of linked lists ) O(\text{number of all elements}\times \text{number of linked lists}) O(number of all elements×number of linked lists).

We can accelerate this process by a simple priority queue, reducing the time complexity to O ( n log ⁡ n ) O(n\log n) O(nlogn), where n n n denotes the total number of all elements in linked lists.

However, by using hash, or bucket sort, wo can achieve O ( V ) O(V) O(V) time complexity, where V V V denotes the size of the discrete value domain of elements, and V ≤ n V\le n V≤n. Additionally, it does not require the given linked lists to be ordered.

To be more detailed, we can use a dictionary to store the nodes of different values and link them together in the end. The code might look like:

# 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]:         buket = {number:None for number in range(-1000, 1001)}         for node in lists:             while node.next:                 buket[node.val].append(node)                 node = node.next             buket[node.val].append(node)         preNode = None         rootNode = None         for value in buket.values():             for node in value:                 if preNode:                     preNode.next = node                 else:                     rootNode = node                 preNode = node         return rootNode 

However, that is not perfect! As the elements are all stored in linked lists, we only need to store the head and tail nodes of each value. When a new element coming in, we just link it as the new head/tail. In the end, we only need to link head and tail of different values’ linked list one by one. This method only takes O ( V ) O(V) O(V) extra space and O ( V ) O(V) O(V) time to link.

Code

Please ignore the typo of “bucket”.

# 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]:         head_buket = {}         tail_buket = {}         for node in lists:             while True:                 if node.val not in tail_buket:                     tail_buket[node.val] = node                 nextNode = node.next                 node.next = head_buket.get(node.val, None)                 head_buket[node.val] = node                 node = nextNode                 if node is None:                     break         preNode = None         rootNode = None         for key in range(-1000, 1001):             if key in head_buket:                 if preNode is None:                     rootNode = head_buket[key]                 else:                     preNode.next = head_buket[key]                 preNode = tail_buket[key]          return rootNode  

相关内容

热门资讯

黑科技科技!红龙扑克辅助器下载... 黑科技科技!红龙扑克辅助器下载,智星德州菠萝app下载,从来是真的有挂(2026已更新)-哔哩哔哩,...
第六分钟辅助!wepower德... 第六分钟辅助!wepower德州怎么设置(德州)外挂辅助神器软件(AI辅助)(2024已更新)-哔哩...
黑科技辅助挂!红龙扑克辅助工具... WePoker透视辅助版本稳定性对比与推荐‌:黑科技辅助挂!红龙扑克辅助工具,智星德州菠萝外挂检测,...
第7分钟辅助!线上德州ai智能... 第7分钟辅助!线上德州ai智能机器人(德州)外挂辅助神器软件(AI辅助)(2024已更新)-哔哩哔哩...
黑科技能赢!智星德州菠萝辅助工... 黑科技能赢!智星德州菠萝辅助工具,德扑之星的优势,果然是真的有挂(2023已更新)-哔哩哔哩1、每一...
第四分钟辅助!德州ai软件怎么... 第四分钟辅助!德州ai软件怎么收费(德州ai)外挂辅助神器软件(AI辅助)(2022已更新)-哔哩哔...
黑科技神器!智星菠萝德州有挂吗... 黑科技神器!智星菠萝德州有挂吗,gg扑克发牌系统,本然真的有挂(2020已更新)-哔哩哔哩;支持多人...
第2分钟辅助!hm3德州辅助(... 第2分钟辅助!hm3德州辅助(德州)外挂辅助神器软件(AI辅助)(2026已更新)-哔哩哔哩1、hm...
黑科技辅助挂!红龙扑克透牌规则... 黑科技辅助挂!红龙扑克透牌规则,德扑之星app是啥软件,切实存在有挂(2026已更新)-哔哩哔哩;1...
5分钟辅助!德州之星辅助器有哪... 5分钟辅助!德州之星辅助器有哪些功能(德州之星)外挂辅助神器软件(AI辅助)(2021已更新)-哔哩...