合併K個排序鍊錶

2021-10-05 12:05:24 字數 914 閱讀 9259

今天是刷leetcode打卡的第3天。每日一次,例行打氣。

今天看到leetcode推薦了一道題名字叫「合併k個排序鍊錶」

題目描述:

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

示例輸入:

[[1,4,5],[1,3,4],[2,6]]

示例輸出:

[1,1,2,3,4,4,5,6]

稍微一看,哦吼,這不就是鍊錶合併嘛,我們首先可以想到的是乙個while() 迴圈,安排它一手,可是定睛一看,不對,這是k個鍊錶,那總不能while() 套while() 啊 ,那豈不是太複雜。

後來我想遍了我腦海中所有的資料結構,突然發現了c++裡面有乙個好東西叫做 ----> 「優先佇列」 這簡直就是雪中送炭啊。

思路: 使用優先佇列,先把所有的元素放進優先佇列中,大的放在前面,然後再用鍊錶的頭插法就變成了乙個降序的有序鍊錶。

話不多說,安排

/** 

* definition for singly-linked list.

* struct listnode

* };

*/class

solution

}

listnode* newhead =

null

;while

(!a.

empty()

)return newhead;}}

;

有人說,你若盛開,蝴蝶自來

可是他不知道的是,當你盛開的時候,來到你面前的那個蝴蝶卻不是你日思夜想的那個蝴蝶。

合併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個有序鍊錶,我們可以將第一二個有序鍊錶進行合併,然後將新的有序鍊錶再繼續跟第三個有序鍊錶合併,直到將所有的有序鍊錶合併完成。這樣做思路上是可行的,但是演算法的時間複雜度將會很大,具體就不計算了。有興趣的自己計算下。根據思路...

合併K個排序鍊錶

題目 合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。示例 輸入 1 4 5,1 3 4,2 6 輸出 1 1 2 3 4 4 5 6 思路 設定乙個堆,每次把每個鍊錶的頭結點放入堆中。記錄每個節點的值與在原陣列中的位置,便於鍊錶往下走。彈出堆中最小值,把最小值所在位置的陣列...