思路:
判断一个地方能不能接到雨水,需要判断两侧最高的柱子是否都大于当前柱子的高度
所以第一步先求出 1到n-2两侧的最大高度,使用前缀
遍历 1~n-2 如果两侧的高度都大于当前高度,就可以接到雨水.
class Solution {
public int trap(int[] height) {
int ans = 0;
int n = height.length;
int[] leftmax = new int[n];
int[] rightmax = new int[n];
int max = height[0];
for(int i=1;i<height.length;i++){
leftmax[i]=max;
max =Math.max(max,height[i]);
}
max = height[n-1];
for(int i=n-2;i>=0;i--){
rightmax[i]=max;
max = Math.max(max,height[i]);
}
for(int i=1;i<n-1;i++){
int min = Math.min(leftmax[i],rightmax[i]);
if(min>height[i]){
ans+=min-height[i];
}
}
return ans;
}
}