Trapping Rain and most Contain

两道经典的题目
1、给定一组柱子,求这组柱型所能存储的雨水总量
对于某个柱子上存放的雨水量是由其左右两边的柱子决定的,即左边>=该柱子的最高柱子和右边>=的最高柱子共同决定。
利用两个数组left和right 保存这两个信息,
Trapping Rain

/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
    var n=height.length;
    var left= new Array(n);
    var right=new Array(n);
    var i,t;
    for( i=0;i<n;i++)
    {
        left[i]=i;
         t=i;
        while(t>=0){
            t=left[t];
            if(height[left[i]]<height[t])
            {
            left[i]=t;}
            t--;
        }
    }
    for(i=n-1;i>=0;i--){
        right[i]=i;
        t=i;
        //find right  the higher until end
        while(t<n){
            t=right[t];
            if(height[t]>height[right[i]]){ 
                  right[i]=t; 
             }
            t++;
        }
    }
    var sum=0;
    for(i=0;i<n;i++){
        var l=height[left[i]];
        var r=height[right[i]];
        sum+=(l>r?r:l)-height[i];
    }
    return sum;
};

2、Container With Most Water

题目是O(n)的时间复杂度,寻找两根柱子使得柱子形成的容积最大

利用左右两个指针,从两端开始,如果某一端柱高大于后一端柱高,那么该端往中间靠拢,因为最短的短板在木桶效应里面中其关键作用

/**
 * @param {number[]} height
 * @return {number}
 */
var maxArea = function(height) {
    var max=0;
    var begin=0,end=height.length-1;
    while(begin<end){
          var v=(end-begin)*(height[begin]>height[end]?height[end]:height[begin])
          if(v>max)max=v;
          if(height[begin]>=height[end]){
              end--;
          }else{
              begin++;
          }
    }

    return max;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值