85 最大矩形

2021-09-12 03:26:56 字數 1124 閱讀 9041

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。

示例:輸入:

[[「1」,「0」,「1」,「0」,「0」],

[「1」,「0」,「1」,「1」,「1」],

[「1」,「1」,「1」,「1」,「1」],

[「1」,「0」,「0」,「1」,「0」]

]輸出: 6

方法:按層分割法

思路:按層生成從頭部開始,生成每一層的柱狀圖,然後求得改層的所能達到的最大面積,直到遍歷完所有層,拿到其中的最大面積即可;

步驟:1,從頭開始,遍歷每一層,定義陣列height記錄當前層的柱狀圖資料;例如[

[「1」,「0」,「1」,「0」,「0」],

[「1」,「0」,「1」,「1」,「1」],

[「1」,「1」,「1」,「1」,「1」],

[「1」,「0」,「0」,「1」,「0」]

]2,遍歷第一層,height資料為 [1,0,1,0,0],求這層的最大面積,記錄;繼續第二層,切記,如果改層height[i]位置的值為0,那麼不管此前值為多少,則也只能為0,若唯一,則當前值加一即可,則是[2,0,2,1,1],;一次類推遍歷所有層,並且每次都拿求得最大面積和當前存的最大面積比較,大於則覆蓋;

3,求最大面積用上一題的方法即可84. 柱狀圖中最大的矩形

class solution 

//轉化成直方圖

private int convert(char matrix)

//每次都求一次最大值

res = math.max(res,largest2(height));

}return res;

}private int largest2(int heights)

while(r < heights.length && heights[r] >= heights[i])

//求面積

int area = (r - l - 1) * heights[i];

//和當前最大面積的值比較,看是否更新

res = res > area ? res : area;

}return res;

}}

85 最大矩形

給定乙個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。示例 輸入 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 輸出 6 使用柱狀圖 棧 defmaximalrectangle matrix if not matrix retur...

85 最大矩形

高度更新的過程 邊界的更新 這種方法和常規的動態規劃有差別,沒有常規的dp矩陣定義。但是在行向下變化的時候,也是利用之前的狀態。class solution object def update self,i,j,dp length dp i j 0 height dp i j 1 area 0 fo...

85 最大矩形

題目 思路 這一題的演算法本質上和84題largest rectangle in histogram一樣,對每一行都求出每個元素對應的高度,這個高度就是對應的連續1的長度,然後對每一行都更新一次最大矩形面積。那麼這個問題就變成了largest rectangle in histogram。本質上是對...