單調棧 總結


1.定義

從棧底元素到棧頂元素呈單調遞增或單調遞減,棧內序列滿足單調性的棧;

2.原理

(1)當新元素在單調性上優於棧頂時(單增棧新元素比棧頂大,單減棧新元素比棧頂小),壓棧,棧深+1;

(2)當新元素在單調性與棧頂相同(新元素於棧頂相同)或劣於棧頂時(單增棧新元素比棧頂小,單減棧新元素比棧頂大),彈棧,棧深-1;

3.應用

 1.求最長的單調上升、遞減區間

  eg.Loongint的花籃

如果對於區間[Si,Sj](1<=i<j<=n)中任意的花籃都比Si高且比Sj低,那么這個區間稱為一個美學區間。

如果根本不存在美學區間,輸出-1。

如果存在美學區間,那么如果任意區間的長度都小於等於k,那么輸出最大的長度,否則輸出最大長度比k大多少(MaxLength-k)。

2.針對每個數,尋找它和它左 / 右邊第一個比它大 / 小的數的值,以及相距多少個數。

  eg..POJ 3250

有一群牛站成一排,每頭牛都是面朝右的,每頭牛可以看到他右邊身高比他小的牛。給出每頭牛的身高,要求每頭牛能看到的牛的總數。

3.左右配對

  eg. Trapping Rain Water

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

For example, 
Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. 

4.多個區間中的最值 / 某個數為最值的最長區間

  eg.POJ 2796

給你一段區間,需要你求出(在這段區間之類的最小值*這段區間所有元素之和)的最大值

5.巧妙運用pop()后寬度的玄學問題:

  1.Largest Rectangle in Histogram

求直方圖中的最大矩陣

For example,
Given height = [2,1,5,6,2,3],
return 10.

  2.POJ 3494(題1的二維版本)

求僅由0,1組成的矩陣中,全部由1組成的小矩陣的最大面積。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM