單調棧的應用

2021-10-19 22:12:31 字數 1051 閱讀 4515

單調棧的使用

單調棧的分類

單調遞增棧

單調遞減棧

所謂的遞增和遞減,相對的是:

棧頂 — 棧底的資料大小表示

棧頂 -> 棧底 從小到大 ,單調遞增

棧頂 -> 棧底 從大到小, 單調遞減

單調棧的實現方式(舉例用單調遞增棧)

從後向前進行儲存,並讀取。

如果棧空入棧

棧非空,此時棧頂元素 >= 入棧元素,入棧

棧非空,此時棧頂元素 < 入棧元素,則元素出棧,直到棧頂元素 >= 入棧元素,或者棧為空為止, 然**棧

實現**如下:

stack<

int> st;

int x;

cin >> x;

while

(!st.

empty()

&& st.

top(

)< x)

st.push

(x);

使用(用來求解單調性)

棧頂讀出來乙個元素,該元素滿足單調性的某一端。

例題:

#include

#include

#include

using namespace std;

int n,a[

3000005

],f[

3000005];

//a是需要判斷的陣列(即輸入的陣列),f是儲存答案的陣列

stack<

int>st;

//模擬用的棧

intmain()

if(st.

empty()

) f[i]=0

;else

f[i]

= st.

top();

st.push

(i);

}for

(int i =

1;i <= n;i++

) cout << endl;

return0;

}

部落格借鑑

單調棧的應用

問題描述 柱狀圖是有一些寬度相等的長方形下端對齊後橫向排列得到的圖形。現在有n個由寬度為1,高度分別為h1,h2,hn的長方形從左到右依次排列組成的柱狀圖。問裡面包含的長方形的最大面積是多少?分析 最容易想到的方法是 討論左端l和右端r。如果確定了長方形的左端l和右端r,那麼最大的可能高度就是min...

單調棧的應用

筆者在做leecode的題 求柱形的最大面積 時,接觸到了單調棧這一資料結構,經過研究發現,單調棧是乙個比較簡單的資料結構,但是要靈活運用卻十分不簡單。單調遞增棧 資料出棧的序列為單調遞增序列 單調遞減棧 資料出棧的序列為單調遞減的序列 描述 有n個人站隊,所有的人全部向右看,個子高的可以看到個子低...

單調棧的應用

單調棧 故名思意,棧中元素是單調遞增 不減 或者是單調遞減 不增 leetcode 85 最大矩形 是乙個應用單調棧的好題目。題目分析 要找到乙個最大矩形,當然可以暴力解法,這個思路簡單,這裡就不多說了。該如何使用單調棧解決問題呢?可以先嘗試地做leetcode 84 柱狀圖中的最大矩形 這個是85...