leetcode 23 合併k個排序鍊錶

2021-10-05 12:36:30 字數 1047 閱讀 2220

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

示例:輸入:

[1->4->5,

1->3->4,

2->6

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

思路:暴力解法,依次使用第乙個鍊錶往後與每個列表兩兩合併;

分治法:

將k個有序鍊錶進行分組,分成兩兩合併之後視為新的k/2個有序鍊錶,重複步驟,直到合併出最後的結果;

分治可以使用遞迴實現,也可以在原地進行修改,通過步長來進行分組;

優先佇列(待補)

分治法**:

/**

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

if(len==1)

return lists[0]

;if(len==2)

return

mergetwolists

(lists[0]

,lists[1]

);int mid = len/2;

vector> sub1;

vector> sub2;

for(

int i =

0;i)for

(int i = mid;i) listnode* l1 =

mergeklists

(sub1)

; listnode* l2 =

mergeklists

(sub2)

;return

mergetwolists

(l1,l2);}

listnode*

mergetwolists

(listnode* l1, listnode* l2)

else}if

(l1)

if(l2)

return dummy.next;}}

;

分治實現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...