题目
给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。
示例:
输入:
[
["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]
]
输出: 6来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximal-rectangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码
小结:核心思路同leetcode 84。需要对matriax每一层做柱状图高度统计,然后用之前的单调栈求解最大矩形面积。
class Solution(object):
def maximalRectangle(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
if not matrix:
return 0
rows_n = len(matrix)
cols_n = len(matrix[0])
res = 0
for _ in range(rows_n):
heights = [0] * cols_n
_matrix = matrix[:_ + 1]
for c in range(cols_n):
col = [line[c] for line in _matrix]
col.reverse()
for cn in col:
if cn == "1":
heights[c] += 1
else:
break
heights = [0] + heights + [0]
s = []
for i in range(len(heights)):
while s and heights[s[-1]] > heights[i]:
cur = s.pop()
width = i - s[-1] - 1
res = max(res, heights[cur] * width)
s.append(i)
return res