给定 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.length1 <= n <= 2 * 1040 <= 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;
}
}