今天是最后一天,还是单调栈
84. Largest Rectangle in Histogram
这道题其实和42题接雨水是相似的,区别就是接雨水是<进行append 这道题是相反的.这是因为那道题是算空的面积,这道题算的是交集中的面积,所以两者是相反的.其他的思路都是一样的.当相等的时候要先pop在append.在对于数组的处理上要一开始insert一个0要不然会忽略第一个元素.
class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
heights.insert(0,0)
stack=[0]
res=0
heights.append(0)
for i in range(1,len(heights)):
if heights[i]>heights[stack[-1]]:
stack.append(i)
elif heights[i]==heights[stack[-1]]:
stack.pop()
stack.append(i)
else:
while len(stack)!=0 and heights[i]<heights[stack[-1]]:
mid=stack[-1]
stack.pop()
if stack:
left=stack[-1]
right=i
w=right-left-1
h=heights[mid]
res=max(res,w*h)
stack.append(i)
return res