今天是刷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 思路 設定乙個堆,每次把每個鍊錶的頭結點放入堆中。記錄每個節點的值與在原陣列中的位置,便於鍊錶往下走。彈出堆中最小值,把最小值所在位置的陣列...