棧
括號(hào)類問題
20. 有效的括號(hào)(easy)
遍歷字符串,每次與棧頂括號(hào)進(jìn)行匹配,匹配成功棧頂彈出,否則繼續(xù)壓入棧。
32. 最長有效括號(hào)(hard)
難點(diǎn)在于不知道如何得到有效括號(hào)的長度,以及如何更新長度。
解法:下標(biāo)入棧法,每次括號(hào)匹配成功,都用當(dāng)前下標(biāo)減去棧頂元素的下標(biāo)得到當(dāng)前有效括號(hào)的長度,解決了長度更新問題。
設(shè)計(jì)類問題
155. 最小棧(easy)
在普通棧的基礎(chǔ)上,實(shí)現(xiàn)常數(shù)時(shí)間檢索到最小元素。
解法:增加一個(gè)輔助棧用于存儲(chǔ)當(dāng)前棧中的最小值。
255. 用隊(duì)列實(shí)現(xiàn)棧(easy)
隊(duì)列特性:先進(jìn)先出;棧特性:后進(jìn)先出
兩個(gè)隊(duì)列法:保存棧頂元素。
一個(gè)隊(duì)列法:每次入隊(duì)新元素時(shí),把隊(duì)列順序反轉(zhuǎn)過來。
單調(diào)棧問題
42. 接雨水(hard)
思路:當(dāng)前柱子的接水量取決于左右兩側(cè)最高柱子。
解法:遍歷兩次序列,保存當(dāng)前柱子的左側(cè)最大值以及右側(cè)最大值。再次遍歷序列,得到最終接水量。
單調(diào)棧解法思路可見:http://www.itdecent.cn/p/cd9b57d79b77
739. 每日溫度(medium)
解法:下標(biāo)入棧+維護(hù)一個(gè)單調(diào)遞減棧
遍歷序列,若當(dāng)前元素值小于棧頂元素所對(duì)應(yīng)的值,則當(dāng)前元素的下標(biāo)入棧,否則彈出棧頂元素并計(jì)算當(dāng)前元素與棧頂元素下標(biāo)之差。
84. 柱狀圖中矩形最大面積(hard)
解法:下標(biāo)入棧+維護(hù)一個(gè)單調(diào)遞增棧
棧與遞歸
1、二叉樹的非遞歸遍歷
2、同理,圖的深度優(yōu)先遍歷也可借助棧來實(shí)現(xiàn)
隊(duì)列
設(shè)計(jì)類問題
225. 用兩個(gè)棧實(shí)現(xiàn)隊(duì)列
類似于用隊(duì)列實(shí)現(xiàn)棧
隊(duì)列與廣度優(yōu)先
圖問題的廣度優(yōu)先可借助隊(duì)列實(shí)現(xiàn),二叉樹層序遍歷也是
雙端隊(duì)列
239. 滑動(dòng)窗口最大值(hard)
優(yōu)先隊(duì)列
347. 前k個(gè)高頻元素(medium)