NC51 合併k個已排序的鍊錶

2021-10-22 05:42:16 字數 1038 閱讀 6277

知識點:歸併、最小堆

題目鏈結

題目描述

合併 k 個已排序的鍊錶並將其作為乙個已排序的鍊錶返回。分析並描述其複雜度。

輸入:[,]

輸出:

解題思路

歸併排序 注意返回值

最小堆,注意在合併的時候 需要把鍊錶的下乙個結點也放進去

**

#include

"cheader.h"

struct listnode };

//1. 歸併排序 時間 o(k*n*log_k) 空間 o(log_k)

class

solution

listnode*

merge_sort

(vector>

& lists,

int l,

int r)

listnode*

merge

(listnode* x,listnode* y)

else

temp = temp-

>next;}if

(x!=

nullptr

) temp-

>next = x;

else

if(y !=

nullptr

) temp-

>next = y;

return head-

>next;}}

;//2. 小根堆 時間o(k*n*log_n) 空間o(k)

class

solution};

listnode *

mergeklists

(vector>

&lists)

return head-

>next;}}

;

今天也是愛zz的一天!

牛客題霸 研發 NC51 合併k個已排序的鍊錶

本題鏈結 合併 k 個已排序的鍊錶並將其作為乙個已排序的鍊錶返回。分析並描述其複雜度。輸入 返回值 合併有序鍊錶的公升級版 基礎版合併有序鍊錶 如下 public class solution else cur cur.next cur.next l1 null l2 l1 return res.n...

合併k個排序鍊錶

合併k個排序鍊錶,並且返回合併後的排序鍊錶。嘗試分析和描述其複雜度。樣例 給出3個排序鍊錶 2 4 null,null,1 null 返回 1 2 4 null 兩兩合併 合併ab得到c 合併cd得到e definition for listnode.public class listnode pu...

合併K個排序鍊錶

從21.合併兩個有序鍊錶的基礎上,我們已經能夠解決兩個有序鍊錶的問題,現在是k個有序鍊錶,我們可以將第一二個有序鍊錶進行合併,然後將新的有序鍊錶再繼續跟第三個有序鍊錶合併,直到將所有的有序鍊錶合併完成。這樣做思路上是可行的,但是演算法的時間複雜度將會很大,具體就不計算了。有興趣的自己計算下。根據思路...