85. Maximum Rectangle
solution
class Solution:
def maximalRectangle(self, matrix: List[List[str]]) -> int:
if not matrix:
return 0
n = len(matrix[0])
heights = [0] * (n + 1)
max_area = 0
for row in matrix:
# 构建如84题的高度
for i in range(n):
heights[i] = heights[i] + 1 if row[i] == "1" else 0
stack = [-1]
for i in range(n + 1):
# 单调栈: 右边第一个高度比自己小的index构成矩形
while heights[i] < heights[stack[-1]]:
h = heights[stack.pop()]
w = i - stack[-1] - 1 # 左右两边第一个比自己小
max_area = max(max_area, h * w)
stack.append(i)
return max_areafollow up
Last updated