题目分析:
这一题是给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。
解题思路:
请看参考博客,他说的很好,但是有一点可以优化,比如他的栈s={1,1,2,2,2,3},可以优化,s中面积一定第二个1,第五个2,第六个3,然后优化为存储下标s={1,4,5}。然后取出栈顶元素的下标然后找出对应的h中的元素作为高度(h[stack.pop()]),宽度为(i - stack[-1] - 1)面积就是h[stack.pop()] * (i - stack[-1] - 1)
。
测试代码:(Runtime: 64 ms, faster than 81.30%)
class Solution:
def largestRectangleArea(self, heights: list) -> int:
res = 0; stack = [0]; heights.append(0); heights.insert(0, 0)
for i in range(len(heights)):
while heights[i] < heights[stack[-1]]:
res = max(res, heights[stack.pop()] * (i - stack[-1] - 1))
stack.append(i)
return res
print(Solution().largestRectangleArea([2,1,5,6,2,3]))