给定一组非负整数组成的数组h,代表一组柱状图的高度,其中每个柱子的宽度都为1。 在这组柱状图中找到能组成的最大矩形的面积(如图所示)。 入参h为一个整型数组,代表每个柱子的高度,返回面积的值。
输入包括两行,第一行包含一个整数n(1 ≤ n ≤ 10000) 第二行包括n个整数,表示h数组中的每个值,h_i(1 ≤ h_i ≤ 1,000,000)
输出一个整数,表示最大的矩阵面积。
6 2 1 5 6 2 3
10
""" 简单想法 对于每一根柱形 计算将其作为最短柱形时,所形成的最大矩形的面积 即左右各有多少柱形>=自身 统计该长度*当前柱形高度即为此时能生成的最大矩形面积 遍历数据list,选出最大面积的输出 """
num=int(input()) list_=[int(x) for x in input().split()] max_=0 for i in range(num): count=0 for j1 in range(i-1,-1,-1): if list_[j1]>=list_[i]: count+=1 else: break for j2 in range(i,num): if list_[j2]>=list_[i]: count+=1 else: break max_=max(max_,count*list_[i]) print(max_)
# coding=utf-8
"""
@author: beyourself
@time: 2018/5/15 20:37
@file: area.py
"""
# 参考:http://blog.jobbole.com/106819/
def largestRectangleArea(height):
# 这个append(0)也很巧妙,优雅的处理了最后一个边界问题
height.append(0)
size = len(height)
# 这几个初始化也值得玩味
no_decrease_stack = [0]
max_size = height[0]
i = 0
while i < size:
cur_num = height[i]
# 入栈规则:如果栈为空(即当前是第一个),或者当前的h比栈顶的h大
if (not no_decrease_stack) or cur_num > height[no_decrease_stack[-1]]:
no_decrease_stack.append(i)
i += 1
else:
index = no_decrease_stack.pop()
# print('pop is : %s' % height[index])
# 每次pop出来都是在计算面积,而高就是pop出来的这个bar的高
# 如果栈不为空, no_decrease_stack[-1]栈顶元素
if no_decrease_stack:
width = i - no_decrease_stack[-1] - 1
else:
# 弹出的时候,栈空了,说明了什么?
# 说明了左边没有比它小的,它是目前为止最小的,因为有的话,肯定在栈的底部
width = i
# print('width is : %s' % width)
# print('i is : %s' % i)
# print(no_decrease_stack)
max_size = max(max_size, width * height[index])
return max_size
n = int(input())
h = [int(i) for i in input().split()]
print(largestRectangleArea(h))