棧:先入後出。(限定僅在表尾進行插入和刪除操作的線性表)
單調棧的應用——查詢乙個數左端或右端最近的乙個數(最大或者最小)。
上邊那個題的解釋:
要求查詢左邊最近比它小的數。利用單調的性質如果在加入乙個數後由於查詢的是比他小的數所以在乙個數入棧前,從棧頂開始向下所有大於等於這個數的數值一定不會在以後查詢使用,所以將他們退棧。這樣棧中數值為乙個單調的序列。整個演算法時間複雜度o(n)。
#include
#include
using
namespace std;
const
int n=
1e5+10;
int stk[n]
,tail=0;
//棧尾
intmain()
}
單調棧的應用
問題描述 柱狀圖是有一些寬度相等的長方形下端對齊後橫向排列得到的圖形。現在有n個由寬度為1,高度分別為h1,h2,hn的長方形從左到右依次排列組成的柱狀圖。問裡面包含的長方形的最大面積是多少?分析 最容易想到的方法是 討論左端l和右端r。如果確定了長方形的左端l和右端r,那麼最大的可能高度就是min...
單調棧的應用
筆者在做leecode的題 求柱形的最大面積 時,接觸到了單調棧這一資料結構,經過研究發現,單調棧是乙個比較簡單的資料結構,但是要靈活運用卻十分不簡單。單調遞增棧 資料出棧的序列為單調遞增序列 單調遞減棧 資料出棧的序列為單調遞減的序列 描述 有n個人站隊,所有的人全部向右看,個子高的可以看到個子低...
單調棧的應用
單調棧 故名思意,棧中元素是單調遞增 不減 或者是單調遞減 不增 leetcode 85 最大矩形 是乙個應用單調棧的好題目。題目分析 要找到乙個最大矩形,當然可以暴力解法,這個思路簡單,這裡就不多說了。該如何使用單調棧解決問題呢?可以先嘗試地做leetcode 84 柱狀圖中的最大矩形 這個是85...