棧與隊(duì)列算法題

當(dāng)前位置的元素不能立刻計(jì)算,需要隔著一段距離去找另一個(gè)對(duì)應(yīng)的元素。

單調(diào)棧問題:

42.接雨水 (hard)
當(dāng)不能繼續(xù)維持單調(diào)遞減棧時(shí),就證明能存貯水,那么把無法繼續(xù)保持遞減的部分出棧,并算出由出棧部分與當(dāng)前高度的差值所能貯存的水量。關(guān)鍵是確定當(dāng)前位置積水量的方法是,在當(dāng)前位置兩側(cè)比當(dāng)前位置高的元素。

84.柱狀圖中矩形最大面積 (hard)
如果能維持遞增的關(guān)系,那么包含當(dāng)前柱子的最大矩形就還不能確定,因?yàn)槿绻疫吀缶涂梢岳^續(xù)往右側(cè)擴(kuò)展,而如果無法保持遞增,那么當(dāng)前柱子小于上個(gè)柱子的高度。以上個(gè)柱子為高度的矩形面積就可以確定下來了。此時(shí)出棧無法保持遞增棧的柱子(即面積已經(jīng)確定的成員)并對(duì)其面積進(jìn)行計(jì)算。關(guān)鍵是確定以當(dāng)前柱子為高度的矩形所需要找到當(dāng)前柱子兩側(cè)更矮的柱子。

739.每日溫度(medium)
從后向前遍歷,因?yàn)樾枰液蠓奖犬?dāng)前位置溫度高的元素,因此維護(hù)一個(gè)從后向前的遞增棧即可。
找右邊方向比當(dāng)前大的元素

利用棧代替遞歸:

105.用棧實(shí)現(xiàn)二叉樹的幾種遍歷(medium)
這里是利用棧去代替遞歸操作

括號(hào)類問題:

32.最長有效括號(hào)(hard)
能夠找到匹配對(duì)象則出棧,最后計(jì)算匹配出棧時(shí)的距離。

394.字符串解碼(medium)
由于括號(hào)的生長方式一般是由內(nèi)向外的,在利用棧進(jìn)行操作時(shí)根據(jù)括號(hào)的匹配情況能找到最內(nèi)側(cè)的括號(hào),并根據(jù)匹配的情況依次出棧相應(yīng)成員。本題目由于會(huì)涉及到括號(hào)外部的multi乘積,所以需要獨(dú)立為表示次數(shù)的數(shù)字建立棧。數(shù)字先入棧稍后再根據(jù)嵌套情況做處理。

隊(duì)列

102.層序遍歷二叉樹(medium)
利用隊(duì)列的先進(jìn)先出次序完成對(duì)樹每層的遍歷

雙端隊(duì)列:

239.滑動(dòng)窗口最大值(hard)
需要從兩側(cè)pop元素,當(dāng)向隊(duì)列中加入新的值時(shí),如果隊(duì)列中有數(shù)值小于當(dāng)前值,那么證明在窗口內(nèi)小于當(dāng)前值的數(shù)字不再起作用就從后方將其pop出來。當(dāng)隊(duì)列中元素的個(gè)數(shù)超過了窗口的長度時(shí)則需要從隊(duì)列前端pop掉舊的元素。因此需要用到雙端隊(duì)列來模擬滑動(dòng)窗口的過程。

優(yōu)先隊(duì)列:

利用大根堆小根堆進(jìn)行排序
347.前k個(gè)高頻元素(medium)
實(shí)際上是利用優(yōu)先隊(duì)列內(nèi)部實(shí)現(xiàn)是堆的這一特性,利用它進(jìn)行一個(gè)快速的排序??梢灾付ㄒ越Y(jié)構(gòu)體中的哪個(gè)元素為參考進(jìn)行排序,默認(rèn)情況下是利用大根堆進(jìn)行自動(dòng)排序,若需要小根堆則需要指定priority_queue<<int>,vector<int>,greater<int>> q;

1353.最多可以參加的會(huì)議數(shù)目(medium)
這道題目是典型的貪心算法,先參加當(dāng)前情況下結(jié)束最早的會(huì)議,此處是利用小根堆排序以較小的時(shí)間復(fù)雜度來獲得當(dāng)前結(jié)束時(shí)間最早的會(huì)議。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容