给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[
["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]
]
输出: 6
class Solution:
def maximalRectangle(self, matrix: List[List[str]]) -> int:
if not matrix:
return 0
m, n = len(matrix), len(matrix[0])
heights = [0] * n
maxa = 0
for i in range(m):
for j in range(n):
if matrix[i][j] == '0':
heights[j] = 0
else:
heights[j] += int(matrix[i][j])
maxa = max(maxa, self.maxa(heights))
return maxa
def maxa(self, heights):
heights = [0] + heights + [0]
maxa = 0
stack = []
for i in range(len(heights)):
while stack and heights[i] < heights[stack[-1]]:
temp = stack.pop()
maxa = max(maxa, (i-stack[-1]-1)*heights[temp])
stack.append(i)
return maxa