数组构成最多水的容器

30 篇文章 4 订阅
30 篇文章 0 订阅

给定n个非负整数,图中i表示序号,ai为数值,由数值水平线构成容器中最多的水。

如图所示,最多可以装7+6+2+5+4+7+7=48

算法思想:设一个max存储最大容量,初试置0,取较大值作为边界,从后向前遍历,每次从取左右端点,然后从左从右遍历,总数累加,如果超过边界则以边界作为数值加入总量,每次遍历完,比较最大总量作为结果暂存,左边界后移,遍历结束返回最大值。

int MaxCapacity(ElemType A[] ,int n){
    int left = 0, right , temp ,sum , max = 0;    //设左、右边界,初值、总和、最大总和
    //左边界不动,右边界不断向前遍历移动
    for(int j = n-1; j>0; j--){    
    	right = j;  sum = 0;    //每一次总和清空
    	temp = (A[left]>A[right]?A[left]:A[right];    //取左右边界最大者为参考数值
	    for(int i = left+1;i<right;i++)    //从左边界开始向右累加数值
	    	if(temp<A[i])                  //中间每个元素比边界值大,则最多装入边界值的数据
	    		sum += temp;
	    	else                            //在边界值一下则将该位置的数值加入
	    		sum += A[i];
	    	if(sum>max){                    //当前总和与暂存的最大总和比较
	    		max = sum;
	    	left++:                          
        }
    }
    return max;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值