1. 程式人生 > >數據結構--單調棧--求最大子矩陣的大小

數據結構--單調棧--求最大子矩陣的大小

最大的 其中 矩陣 直方圖 行記錄 str ont http 圖片

求最大子矩陣的大小
給定一個整型矩陣map, 其中的值只有0和1兩種, 求其中全是1的所有矩形區域中, 最大的矩形區域為1的數量。
例如:
1 1 1 0
其中, 最大的矩形區域有3個1, 所以返回3。
再如:
1 0 1 1
1 1 1 1
1 1 1 0
其中, 最大的矩形區域有6個1, 所以返回6。

解:技術分享圖片將其放到一個矩陣中,同時從第0行開始計算,以該行打底時,直方圖的最大面積

如第0行,數組為[1, 0, 1, 1] 此時按照下面的求直方圖最大面積。

然後以第1行打底,此時數組為[2, 1, 2, 2],同理求直方圖最大面積

然後以第2行打底,此時數組為[3, 2, 3, 0]

註:數組的大小是按照它這一行開始,一列中有多少個連續的1來計算的。



類似的題目:給定一個數組,表示的是每個位置的直方圖的高度,求直方圖中連續部分的最大面積

技術分享圖片

解:利用單調棧,構成一個有棧底到棧頂是從小到大的結構,當要入棧的元素num小於棧頂元素時,棧頂元素出棧,同時對該元素左右能到達的邊界進行記錄,這樣以這個元素為中心的面積就可以求出來了。

數據結構--單調棧--求最大子矩陣的大小