📅  最后修改于: 2023-12-03 15:40:43.810000             🧑  作者: Mango
对于给定的 01 矩阵,求出没有给定点的最大矩形的面积。
本问题可以使用单调栈算法进行求解。
假设我们已经求出了每一行中每个位置往上连续 1 的个数(也就是每一行的高度)。那么问题就转化成了:给定一个柱状图,求其最大矩形面积。
可以使用单调栈算法进行求解:
def largestRectangleArea(heights: List[int]) -> int:
stack = []
ans = 0
heights.append(0) # 加上一个高度为 0 的柱子,确保所有柱子都可以被处理到
for i in range(len(heights)):
while stack and heights[i] < heights[stack[-1]]:
h = heights[stack.pop()]
w = i if not stack else i - stack[-1] - 1
ans = max(ans, h * w)
stack.append(i)
return ans
def maximalRectangle(matrix: List[List[str]]) -> int:
if not matrix:
return 0
m, n = len(matrix), len(matrix[0])
heights = [0] * n # 初始化每个柱子的高度
ans = 0
for i in range(m):
for j in range(n):
if matrix[i][j] == '1':
heights[j] += 1
else:
heights[j] = 0
area = largestRectangleArea(heights)
ans = max(ans, area)
return ans