题目:
思路:
首先寻找第i 个位置的最大面积:
计算方法:向左找第一个小于i高度的位置记录为left,向右找第一个小于i高度的位置记录为right.
面积公式=heights[i]*(right-left-1)
每次更新最大面积
优化:
利用单调递增的栈来寻找最大面积
代码:
def largestRectangleArea(self, heights: List[int]) -> int:
if not heights:
return 0
stack=[]
heights=[0]+heights+[0]
res=0
for i in range(len(heights)):
while stack and heights[stack[-1]]>heights[i]:
tmp=stack.pop()
res=max(res,heights[tmp]*(i-stack[-1]-1))
stack.append(i)
return res