最大矩形
给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积
思路: 先求每一行中每一列中1的最大数,剩下的按照84题柱状图最大面积求解
class Solution(object):
def maximalRectangle(self, matrix):
"""
:type matrix: List[List[str]]
:rtype: int
"""
if not matrix:
return 0
m, n = len(matrix), len(matrix[0])
tem = [0 for _ in range(n)]
res = 0
for i in range(m):
for j in range(n):
if i == 0:
tem[j] = int(matrix[i][j])
else:
if matrix[i][j] == "0":
tem[j] = 0
else:
tem[j] += int(matrix[i][j])
res = max(self.helper(tem), res)
return res
def helper(self, nums):
stack, n = [], len(nums)
left, right = [0] * n, [n] * n
for i in range(n):
while stack and nums[stack[-1]] >= nums[i]:
right[stack[-1]] = i
stack.pop()
left[i] = stack[-1] if stack else -1
stack.append(i)
res = max((right[i] - left[i] - 1) * nums[i] for i in range(n))
return res