LeetCode23 合併K個排序鍊錶

2021-09-26 20:41:54 字數 1225 閱讀 7421

題目描述:

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:輸入:

[1->4->5,

1->3->4,

2->6

]輸出: 1->1->2->3->4->4->5->6

方法一:暴力查詢

class solution:

def mergeklists(self, lists: list[listnode]) -> listnode:

list=

head=new_list=listnode(0)

for l in lists:

while l:

l=l.next

list.sort()

for i in list:

new_list.next=listnode(i)

new_list=new_list.next

return head.next

複雜度分析

時間複雜度:o(nlogn) ,其中 n 是節點的總數目。

空間複雜度:o(n)

class solution:

def mergeklists(self, lists: list[listnode]) -> listnode:

length=len(lists)

m=1while m0 else lists

def mergetwolists(self, l1: listnode, l2: listnode) -> listnode:

if not l1:

return l2

if not l2:

return l1

head=listnode(0)

cur=head

while l1 and l2:

if l1.val>=l2.val:

cur.next=l2

l2=l2.next

else:

cur.next=l1

l1=l1.next

cur=cur.next

if not l1:

cur.next=l2

else:

cur.next=l1

return head.next

複雜度分析

時間複雜度: o(nlogk) ,其中 k 是鍊錶的數目。

空間複雜度:o(1)

分治實現LeetCode 23題 合併K個排序鍊錶

紀念第一道沒有看題解做出來的困難題 分治思想 歸併排序實現合併k個排序鍊錶 由於是實現一連串已經排序的鍊錶,所以第一時間想到了歸併排序 又由於是實現多個鍊錶的總排序,為了減少時間複雜度又想到了分治思想,這一題中也就是二分法 做了這麼多天的題總算有點進步 class solution 結果陣列的頭結點...

LeetCode 23 合併 K個排序序列

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 解題思路 採用分治的思想,將 k 個鍊錶的合併問題轉換成,合併 2 個有序鍊錶的問題 typedef struct listnode list 定...

Leetcode23 合併K個排序鍊錶

題目 解題思路 這道題使用的是分治演算法。首先還用輔助函式mergetwolists 用來合併兩個有序單鏈表,不申請額外的空間實現原地合併。如下 listnode mergetwolists listnode l1,listnode l2 else head nexthead while l1 nu...