classSolution(object):deflargestRectangleArea(self, heights):"""
:type heights: List[int]
:rtype: int
"""# 思路:两次单调栈# 面积 = (右边小于h的最近下标 - 左边小于h的最近下表 - 1)* hiflen(heights)<=1:return heights[0]
left =[-1]*len(heights)# 左边小于h的坐标初始化为-1
right =[len(heights)]*len(heights)# 右边小于h的坐标初始化为len(heights)
stack =[]for i inrange(len(heights)):while stack and heights[i]< heights[stack[-1]]:
prevI = stack.pop()
right[prevI]= i
stack.append(i)
stack =[]for i inrange(len(heights)-1,-1,-1):while stack and heights[i]< heights[stack[-1]]:
prevI = stack.pop()
left[prevI]= i
stack.append(i)
ans =0for l, r, h inzip(left, right, heights):print(l,r,h)
ans =max(ans,(r - l -1)* h)return ans