其他分享
首页 > 其他分享> > leetcode42.接雨水

leetcode42.接雨水

作者:互联网

leetcode42.接雨水

题目

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

用例

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
输入:height = [4,2,0,3,2,5]
输出:9

求解

/**
 * @param {number[]} height
 * @return {number}
 */
var trap = function(height) {
    let len = height.length;
    let min = 0;
    let water = 0;
    let left = 0;
    let right = len-1;
    while(left<right){
        //先判断左右指针哪个最小
        if(height[left]<height[right]){
            //是否大于已经计算过的雨量高度
            if(height[left]>min){
                //计算雨量
                for(let i = left+1;i<right;i++){
                    //去掉已经计算过一部分雨量的部分
                    if(height[i]<min){
                        water = water+(height[left]-min)
                    }else if(height[i]<height[left]){
                        water = water+(height[left]-height[i])
                    }
                }
                //更换新min
                min = height[left]
            }
            left++
        }else{
            if(height[right]>min){
                for(let i = left+1;i<right;i++){
                    if(height[i]<min){
                        water = water+(height[right]-min)
                    }else if(height[i]<height[right]){
                        water = water+(height[right]-height[i])
                    }
                }
                min = height[right]
            }
            right--
        }
    }
    return water
};

标签:number,雨水,height,let,len,leetcode42,left
来源: https://www.cnblogs.com/boniii/p/15512893.html