LeetCode85最大矩形
阿新 • • 發佈:2018-12-16
題目描述
給定一個僅包含 0 和 1 的二維二進位制矩陣,找出只包含 1 的最大矩形,並返回其面積。
示例:
輸入:
[
["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]
]
輸出: 6
解題思路
思路一:暴力法
一行一行的遍歷陣列,維護每個位置到頂部的高度,如果某位置高度大於0,就往回掃描到首列,同時維護一個當前最低的高度,這樣就可以求出從這個位置到第一列的最大面積了。時間複雜度是 ,當然通過轉置可以優化到 ,但數量級不變。
思路二:動態規劃法
由於在暴力列舉法中我們每碰到一個高度不為0的情況就往左搜尋找到當前最低的高度然後更新面積,所以會導致重複計算。動態規劃剛好可以通過記錄原有資訊來避免重複搜尋。那麼每一行我們需要記錄什麼呢?我們需要記錄並維護的就是一行中每個位置高度的左右邊界。
思路三:遞增棧法
主要是分為兩步,第一步是將原始輸入做一下對映。
對每一行做轉換,本例中原始輸入可轉換為:
[
["1","0","1","0","0"],
["2","0","2","1","1"],
["3","1","3","2","2"],
["4","0","0","3","0"]
]
每個元素的值 = 該值按列向上遍歷,遇到非0元素的個數和(包含自身)
然後對每一行輸入使用第84題中的解題方法求出最大矩形,最後求所有行的最大矩形面積即可。