class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
stack = []
n = len(heights)
# 给数组头尾添加0高度,方便出栈
heights = [0] + heights + [0]
res = [0] * (n+2) # 结果数组
# 单调栈思想,以当前高度为高的矩形有多大
# 存放索引好记录位置,两边都比自己小就可以确定当前面积
for i in range(n+2):
while stack and heights[stack[-1]] > heights[i]:
index = stack.pop()
res[index] = heights[index] * (i-stack[-1]-1)
stack.append(i)
return max(res)
07-02
379