最近又在重新刷題,又看到了單調棧和單調佇列的題目,發現當時也就是背一背就過了,沒有領會到精髓,這次看了幾位前輩寫的心得,感覺理解深了一些。
傳送門
關鍵:用單調佇列來解決問題,一般都是需要得到當前的某個範圍內的最小值或最大值。
就比如滑動視窗中的最大值問題(eg:[1,[1,2,3,4],5,6,7,7,9]), 如果入隊的元素比隊首的要大,則將隊首的去掉直至滿足遞減條件,跟單調棧的乙個區別在於隊尾因為位置問題(劃出視窗)需要更新。
傳送門
關鍵:需要找列表中某個元素最左或者最右比他大(小)的第乙個元素的時候
拿單調遞增棧舉例,當入棧元素比棧頂元素小的時候,需要將棧頂元素依次彈出直至滿足遞增條件,元素方可入棧,所以對於這些彈出的元素,這個即將入棧的元素就是他們在右邊第乙個遇到的比他小的值,進而可以在彈出時進行一些操作。
棧和佇列 單調佇列 單調棧
講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...
單調棧和單調佇列
本文摘自部落格,歡迎前往部落格以獲得更好的體驗。從名字上就聽的出來,單調棧中存放的資料應該是嚴格單調有序的,具有以下兩個性質。滿足從棧頂到棧底的元素具有嚴格的單調遞增或單調遞減性 滿足棧的後進先出特性,即越靠近棧底的元素越早進棧。單調棧也分為單調遞增棧和單調遞減棧。stackst for 遍歷這個陣...
單調棧和單調佇列
用陣列模擬出單調棧和單調佇列 單調棧常常用來維護離最近的比當前值小或大的值,單調佇列維護乙個固定區間的最小或最大值 單調棧維護乙個左邊比他小的值的 1 include2 using namespace std 3int st 100010 n,a 100010 4 inttt 5int main 6...