求木板最大拼接矩形

给定n块木板A[1…n],高度记为A[i],每块目标高度不等,宽度相等,用这些木板排列成一面木板墙,木板排列好后,求解木板墙中最大的矩形面积,请设计算法求得木板墙最大的矩形面积,并分析算法效率。
举例说明,如下图所示的木板排列,最大矩形面积为深灰色区域,即4*3=12。
这里写图片描述
分析: 扫描数组,计算出每个以A[i]为高的矩形面积,再找出最大值即可。
对于A[i],分别向前和向后扫描,若高度大于等于A[i],则以A[i]为高的矩形面积加上A[i].
很显然,算法复杂度为O(n^2).

int get_max(int a[], int n)  
{  
    int i, j, tmp;  
    int result = a[0];  
    for (i = 0; i < n; i++) {  
        tmp = a[i];  
        for (j = i-1; (j >= 0) && (a[j] >= a[i]); j--) {  
            tmp += a[i];  
        }  
        for (j = i+1; (j < n) && (a[j] >= a[i]); j++) {  
            tmp += a[i];  
        }  
        if (tmp > result)   
            result = tmp;  
    }  
    return result;  
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值