直方图矩形面积

给定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))

猜你喜欢

转载自blog.csdn.net/weixin_42587961/article/details/81168509