给定n个非负整数,表示直方图的方柱的高度,同时,每个方柱的宽度假定都为1;试找出直方图中最大的矩形面积。如:给定高
度为:2,1,5,6,2,3,最大面积为10
def largest_rect_area(height:list):
#确保height的最后一位能够计算到
height.append(0)
#存储索引值
stack=[0]
max_area=height[0]
val=0
for i in range(1,len(height)+1):
while stack:
cur = stack[-1]
#若a[i]>a[i-1],则将a[i]压栈
if height[cur]<height[i]:
area = (i - cur-1) * height[val]
max_area = max(max_area, area)
stack.append(i)
break
else:
#若a[i]≤a[i-1],则计算栈中能够得到的
#最大矩形面积
area = (i - cur-1) * height[val]
max_area = max(max_area, area)
val = stack.pop()
return max_area
a=[2,7,5,6,4,5,6,1]
print(largest_rect_area(a))