84. 柱状图中最大的矩形
给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
求在该柱状图中,能够勾勒出来的矩形的最大面积。
例如:
思路:两次遍历,使用单调栈得出该高度的左右边界,然后求最大面积
class Solution:
def largestRectangleArea(self, heights: List[int]) -> int:
if not heights:
return 0
n = len(heights)
stack,left = [],[0]*n
for i in range(0,n):
while(stack and heights[stack[-1]]>=heights[i]):
stack.pop()
stack.append(i)
left[i] = 0 if len(stack)==1 else stack[-2]+1
stack,right = [],[0]*n
for i in range(n-1,-1,-1):
while(stack!=[] and heights[stack[-1]]>=heights[i]):
stack.pop()
stack.append(i)
right[i] = n-1 if len(stack)==1 else stack[-2]-1
ans = 0
for i in range(n):
ans = max(ans,(right[i]-left[i]+1)*heights[i])
return ans
时间复杂度O(N)
空间复杂度O(N)