給定乙個僅包含 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。本質上是對...