leetcode 85 最大矩形 HARD

2021-09-24 02:39:03 字數 1376 閱讀 1011

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

示例:

輸入:[

["1","0","1","0","0"],

["1","0","1","1","1"],

["1","1","1","1","1"],

["1","0","0","1","0"]

]輸出:6

思路:以每一行為當前下邊界,求出各個列的高度 計算當前最大面積(呼叫leetcode84題maxrecarea)

複雜度:o(m*n)

class solution(object):

def maximalrectangle(self, matrix):

""":type matrix: list[list[str]]

:rtype: int

"""# 思路:以每一行為當前邊界,求出各個列的高度 計算當前最大面積(呼叫maxrecarea)

if not matrix or not matrix[0]:return 0

max_rea=0

m,n=len(matrix),len(matrix[0])

heights=[0]*n

for i in xrange(m):

# 以當前第i行為下邊界

for j in xrange(n):

if matrix[i][j]=='0': heights[j]=0

else: heights[j]+=1

max_rea=max(max_rea,self.maxrecarea(heights))

return max_rea

def maxrecarea(self,heights):

'''84題思路,求heights能構成的最大矩形面積

維護乙個單調棧(遞增)存放下標,以當前棧頂元素為高度,尋找左右邊界(第乙個小於棧頂元素的位置)

'''# 保證右邊界可達

stack=

res=0

for i in range(len(heights)):

while stack and heights[i]index=stack.pop()

res=max(res,heights[index]*((i-stack[-1]-1) if stack else i))

return res

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 和 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一樣,對每一列都求出每...