给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
class Solution {
public int trap(int[] height) {
int len = height.length;
//左指针从左向右遍历
int [] leftMax = new int [len];
leftMax[0]=height[0];
for(int i =1;i<len;i++){
leftMax[i]=Math.max(leftMax[i-1],height[i]);
}
//右指针从右向左遍历
int [] rightMax = new int [len];
rightMax[len-1]=height[len-1];
for(int i =len-2;i>=0;i--){
rightMax[i]=Math.max(rightMax[i+1],height[i]);
}
//可以承接的总雨水
//雨水数=min(当前列左右两侧的最大值)-当前列的高度
int sum =0;
for(int i=0;i<len;i++){
sum+=Math.min(leftMax[i],rightMax[i])-height[i];
}
return sum;
}
}