84. Largest Rectangle in Histogram
這道題用stack記錄遞增序列,計算以某個點為高度的矩形,就要用這個點的高度乘以最右和最左的邊界, 因為是遞增序列,那么它的最左0或者stack[-1],最右就是當它被pop出去時候的index-1
這題稍微tricky的地方在于在heights的右邊界都加上一個值,這樣保證最后一個值可以被訪問到,然后stack永遠不為空
class Solution(object):
def largestRectangleArea(self, heights):
"""
:type heights: List[int]
:rtype: int
"""
if not heights:
return 0
if len(heights) == 1:
return heights[0]
stack = [-1]
heights = heights + [0]
max_area = 0
for i in range(len(heights)):
while heights[i] < heights[stack[-1]]:
cur = heights[stack.pop()]
max_area = max(max_area, cur*(i - stack[-1] - 1))
stack.append(i)
return max_area