84. Largest Rectangle in Histogram
solution
class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
# 输入数组首尾各补上一个0
heights = [0] + heights + [0]
stack = [0]
result = 0
for i in range(1, len(heights)):
# 单调栈: 找左右第一个比自己小的. 更新过程中,作为右边,如果比栈顶左边的元素小,则出栈计算结果
while stack and heights[i] < heights[stack[-1]]:
mid_height = heights[stack[-1]]
stack.pop()
if stack:
# 左边比自己小的,则是剩余栈里的栈顶
area = (i - stack[-1] - 1) * mid_height
result = max(area, result)
stack.append(i)
return resultfollow up
Last updated