给定一个仅包含 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):
"""
:type matrix: List[List[str]]
:rtype: int
"""
# m行, n列
if matrix and matrix[0]:
m, n = len(matrix), len(matrix[0])
else:
return 0
mx = 0
for i in range(m):
if i == 0:
heights = [int(ele) for ele in matrix[i]]
# mx = self.func(heights) if self.func(heights) > mx else mx
temp = self.func(heights)
mx = temp if temp > mx else mx
print('i is {}, heights is {}, mx is {}'.format(i, heights, mx))
else:
for j in range(n):
if matrix[i][j] == '1':
heights[j] += int(matrix[i][j])
else:
heights[j] = 0
# mx = self.func(heights) if self.func(heights) > mx else mx
temp = self.func(heights)
mx = temp if temp > mx else mx
print('i is {}, heights is {}, mx is {}'.format(i, heights, mx))
return mx
def func(self, heights):
temp = []
stack = []
heights.append(-1)
for ind, height in enumerate(heights):
cpos = ind
while stack and stack[-1][-1] >= height:
cpos, h = stack.pop()
temp.append((ind - cpos) * h)
stack.append([cpos, height])
return max(temp) if temp else 0