CCF201312-3 最大的矩形(python)

试题编号 201312-3
试题名称 最大的矩形
时间限制 1.0s
内存限制 256.0MB
问题描述 问题描述
    在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别就是3, 1, 6, 5, 2, 3。
 s
请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是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)
发布了45 篇原创文章 · 获赞 0 · 访问量 1013

猜你喜欢

转载自blog.csdn.net/jokerxsy/article/details/104090118
今日推荐