從名字上就聽的出來,單調棧中存放的資料應該是有序的,所以單調棧也分為單調遞增棧和單調遞減棧
單調遞增棧:棧中資料出棧的序列為單調遞增序列
單調遞減棧:棧中資料出棧的序列為單調遞減序列
ps:這裡一定要注意所說的遞增遞減指的是出棧的順序,而不是在棧中資料的順序
單調棧板子題:
這題是簽到題,很明顯就是乙個單調棧問題,直接上板子,5分鐘解決。
#include
using
namespace std;
intmain
(void
)//正向來一遍 找到在當前位置能看到樓的數量(不算自身)
for(
int i =
0; i < v.
size()
; i++
)//反向來一遍 找到在當前位置能看到樓的數量(不算自身)
for(
int i = v.
size()
-1; i >=
0; i--
)reverse
(v2.
begin()
, v2.
end())
;//這裡+1的意思是加上自身,自己能看到自己
for(
int i =
0; i < v.
size()
; i++
)cout << v1[i]
+ v2[i]+1
<<
" ";
}
單調棧問題
單調棧能夠求得該數左邊離他最近的大於 小於的數 其他問題也可以轉換為此問題 例如 求 a i 左邊第乙個小於a i 的數 對於a i 每次入棧如果有大於等於a i 的數,直接出棧 證明 如果求左側第乙個小於a i 的數 如果a i 入棧後左側有大於a i 的數,則那個數不僅是大值而且還出現的比較早,...
單調棧 模板 單調棧模板
biu 單調棧主要用於求取左邊第乙個比它大,或者比它小的數。就比如站隊隨便排成一列,可以求到每個人後面第乙個比他高的人。同理可以推廣至右邊,比它矮均可。這就是單調遞增棧 遞減棧,從前至 棧,從後向前入棧的區別了。單調棧比較抽象,非常具有智慧型的想法,可應用的場景相當少,根據幾個經典題目體會它的用法會...
力扣 單調棧與單調佇列問題
單調棧 1.402.移掉k位數字 需要注意邊界情況,去除完無字元返回 判斷時不能有 號,棧內應該是不嚴格遞增的。2.316.去除重複字母 需要借助雜湊表來統計出現次數,並且標記是否已經存在於棧內。3.84.柱狀圖中最大的矩形,挺難的,針對每乙個柱需要確定左右比它低的作為邊界,正向遍歷單調棧確定左邊界...