刷题7 接雨水

34 阅读1分钟

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

 

示例 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 个单位的雨水(蓝色部分表示雨水)。 

示例 2:

输入: height = [4,2,0,3,2,5]
输出: 9

 

提示:

  • n == height.length
  • 1 <= n <= 2 * 104
  • 0 <= height[i] <= 105

题解:按列计算 分别计算从左和从右开始的最高高度 两侧的最高高度中较小的那个减去height[i]就是可以接到的体积

class Solution {
public int trap(int[] height) {
    //依次查找从左到右 的最高 高度  其中较低的和当前的差值 
    int result=0,m=height.length;
    int []left=new int[m];
    int []right=new int[m];
    int maxleft=0,maxright=0;
    for(int i=1;i<m;i++){
        maxleft=Math.max(maxleft,height[i-1]);
        left[i]=maxleft;
    }
    for(int j=m-2;j>0;j--){
        maxright=Math.max(maxright,height[j+1]);
        right[j]=maxright;
    }
    for(int i=1;i<m-1;i++){
        result+=Math.max(0,Math.min(left[i],right[i])-height[i]);
    }
    return result;
}

}