试题编号 | 201312-3 |
---|---|
试题名称 | 最大的矩形 |
时间限制 | 1.0s |
内存限制 | 256.0MB |
问题描述 | 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别就是3, 1, 6, 5, 2, 3。 请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。 输入格式 第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。 第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。 输出格式 输出一行,包含一个整数,即给定直方图内的最大矩形的面积。 样例输入 6 3 1 6 5 2 3 样例输出 1 |
分析
我的思路是,遍历每一条矩形;假设我正在考虑当前矩形,则,把高定为当前矩形的高,然后计算宽;从当前矩形所在的位置向两边访问,只要是遇到一个比当前矩形更高的,宽就可以加一,继续访问,直到不满足条件为止;得到的宽、高,计算出的面积便是以当前矩形的高为高的最大面积。
代码:
recnum = int(input()) # 矩形数量
hetstr = input().split() # 存放矩形高度的列表
maxsize = 0
for i in range(recnum):
width = 1 # 初始宽为1
for j in range(i-1,-1,-1): # 向左遍历
if int(hetstr[j]) >= int(hetstr[i]):
width += 1
else: # 和下面的else一样,表示一旦遇到不满足条件的,就停止遍历
break
for k in range(i+1,recnum,1): # 向右遍历
if int(hetstr[k]) >= int(hetstr[i]):
width += 1
else: #
break
size = (width) * int(hetstr[i])
if size > maxsize:
maxsize = size
print(maxsize)