LeetCode 刷题记录: 84. Largest Rectangle in Histogram [Python]

原题

https://leetcode.com/problems/largest-rectangle-in-histogram/

Given n non-negative integers representing the histogram’s bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.

思路

在height后面加上一个0作为右边界,记录高度堆栈stack加上一个-1作为左边界。

遍历heights,若当前height不低于stack最后一个元素的高度时,添加进stack中。否则:

  1. 从堆栈中弹出最后一个元素,即当前最高处位置信息,获取该位置的高度。

  2. 以当前位置i作为右边界,当前堆栈的最后一个元素stack[-1],即当前第二高的位置作为左边界,宽度则为右边界-左边界-1(边界均不包含在内),即w=i-stack[-1]-1。

  3. 此时矩形面积即为h*w。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
heights.append(0)
stack=[-1]
ans=0
for i in range(len(heights)):
while heights[i]<heights[stack[-1]]:
h=heights[stack.pop()]
w=i-stack[-1]-1
ans=max(ans,h*w)
stack.append(i)
heights.pop()
return ans

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×