單調棧結構及其應用

2021-09-27 11:38:50 字數 875 閱讀 4394

單調棧

解決乙個陣列中,對於每個數,求左邊離它最近的比它大(小)的數,右邊離它最近的比它大(小)的數,時間複雜度o(n)實現。

1.乙個陣列可化為乙個直方圖,陣列內數值代表該位置的高度(邊長為1的小正方形的個數),求這個直方圖可以形成的最大矩形面積(即小正方形個數)。

int

maxrecfrombottom

(vector<

int>

&height)

minstack.

push

(i);

}while

(!minstack.

empty()

)return maxrec;

}

2.對於該題,則從矩陣第一行開始往下,依次借助上面過程求解每一行可以形成的的矩形最大面積,其中最大值即為題解。

例如題中例子,第一行 1 0 1 1,第二行 2 1 2 2 第三行 3 2 3 0

int

maxrecsize

(vector

int>>

&matrix)

maxrec =

max(maxrec,

maxrecfrombottom

(height));

}return maxrec;

}

烽火傳遞

題目:

單調棧結構

題目 給定乙個不含重複數值的陣列,找到每乙個i位置左右兩邊第乙個比arr i 小的值的下標。如果不存在則下標為 1 解暴力解 時間複雜度為n 2 高階 使用單點棧結構,時間複雜度為 o n 單調棧找小的,棧底放較小值 找大的棧底放較大值。如題,找相鄰最近較小,所以棧底到棧頂公升序。遍歷陣列,如果棧為...

單調棧結構

單調棧結構 給定乙個不含有重複值的陣列 arr,找到每乙個 i 位置左邊和右邊離 i 位置最近且值比 arr i 小的位置。返回所有位置相應的資訊。輸入描述 第一行輸入乙個數字 n,表示陣列 arr 的長度。以下一行輸出 n個數字,表示陣列的值。輸出描述 輸出n行,每行兩個數字 l 和 r,如果不存...

單調棧的應用

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