11. Container With Most Water 求最大水的面积

原题:

给定n个非负整数12,...,n,其中每个代表坐标(ii处的一个点绘制n条垂直线,使得线i的两个端点处于(ii)和(i,0)处。找到两条线,它们与x轴一起形成一个容器,使容器中含有最多的水。

注意:您不得倾斜容器,并且n至少为2。

求最多水问题即是求两条线之间以其中短的为长x轴间距为宽所可能组成的最大面积

解:

1思路 :对每个边遍历求其最大面积 并通过比较之后返回最大面积

2优化解。二分法求其最大面积

var maxArea = function(height) {
    var maxarea=0,l=0,r=height.length-1;
    while (l<r){
        maxarea=Math.max(maxarea,Math.min(height[l],height[r])*(r-l));
        if (height[l]<height[r]){
            l++;
        }else {
            r--;
        }
    }
    console.log(maxarea);
    return maxarea;

};

从两边的边开始  向中间求其最大面积;

最开始 

Math.min(height[l],height[r])*(r-l)    //  这个是 最外边的两条边的 短的那个最大的面积

//随后
if (height[l]<height[r]){   //短的那个边放弃 向中间靠拢 
            l++;
        }else {
            r--;
        }

一直重复  即可求出其中最大可存水的面积 

其中 或可出现 某边x  向相反方向 边 y求得的面积大于向中间靠拢的边z的面积   其中x<z,y<z;lz<lx<ly;

例 若 x>y   x.z 的面积为 x*(lx-lz)  x.y面积 y(ly-lx)  y.z  面积  y(ly-lz)   ly>lx>lz   若  y(ly-lx)>  z(lx-lz) 则 必有  y(ly-lz)>(y(ly-lx)

若 y>x     x.z  x*(lx-lz)  x.y  x(ly-lz)     y.z   y(ly-lz)     若  x(ly-lx)>x(lx-lz)   则必有 y(ly-lz)>x(ly-lx)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值