时间复杂度(O(n)),思想:栈
class Solution:
def largestRectangleArea(self, heights: [int]) -> int:
area, max_area = [], 0
for i, h in enumerate(heights):
start = i
while len(area) > 0 and area[-1][1] > h:
max_area = max((i - area[-1][0]) * area[-1][1], max_area)
start = area[-1][0]
area = area[:-1]
area.append((start, h, i))
max_area = max((i - area[-1][0] + 1) * h, max_area)
while len(area) > 0:
max_area = max((area[-1][2] - area[0][0] + 1) * area[0][1], max_area)
area = area[1:]
return max_area