LeetCode 85 最大矩形

2021-10-01 15:31:24 字數 1179 閱讀 4903

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

示例:

輸入:[[

"1",

"0",

"1",

"0",

"0"],[

"1",

"0",

"1",

"1",

"1"],[

"1",

"1",

"1",

"1",

"1"],[

"1",

"0",

"0",

"1",

"0"]

]輸出:

6

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

**核心:(能理解思路最重要,參考)

for(int i = 0; i < rows; i++)

res = max(res, leetcode48(heights));

}

思路:

其實上述更新每一行高度的思路有點dp的味道:從上層得到下一層能建立的柱體的最大高度,然後在每一層借用單調棧求出以該組柱體為高的最大矩形面積。時間複雜度o(m

n)

o(mn)

o(mn

),空間複雜度o(n

)o(n)

o(n)

class

solution

res =

max(res,

largestrectanglearea

(heights));

}return res;

}// leetcode 84

intlargestrectanglearea

(vector<

int> heights)

indexstack.

push

(i);

}return maxarea;}}

;

LeetCode 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此題和上一題的擴充套件,此題給的二維矩陣的每一行向上都形成了乙個直方圖,所以二維矩陣有多少行,就有多少個直方圖...

leetcode85 最大矩形

1.轉換成直方圖的做法 參考 利用leetcode84中的方法來做 首先要將給定的01矩陣轉換成84中的直方圖的樣子。每一行都對應乙個直方圖,且下一行直方圖是由上一行直方圖計算得到的。如果是0,則當前直方圖高為0,如果是1,則當前直方圖高度是上一層對應位置高度 1 1 0 1 0 0 1,0 1,0...

LeetCode 85 最大矩形

先統計一下每乙個塊上面的連續長度,然後列舉一行的連續子段,求面積。如果高有0的,break,因為後續也是0.class solution else int min h int max for int k j k 0 k return ans 使用單調棧,統計了每塊上面的連續長度,就轉換成,對於乙個快...