本题可以通过先从一个方向遍历,同时记录遇到的最高柱(即最大数),使用这个数减去遍历到的数得到应该接到的雨水。累加这些数。当遇到的最后一块柱不是最高柱时,用最高柱的位置与数组长度的距离乘最高柱的高度。然后再反向遍历直到最高柱,遍历过程与之前相同,同时每次要加上柱高,因为之前减去的数包含了柱高。
class Solution {
public int trap(int[] height) {
int lenght = height.length;
if(lenght<=1){
return 0;
}
int max = height[0];
int index = 0;
int res = 0;
for(int i=1;i<lenght;i++){
if(height[i]<max){
res = res + max - height[i];
}else if(height[i]>=max){
max = height[i];
index = i;
}
if(i==(lenght-1)&&index!=i){
res = res - max*(i-index);
int maxj = 0;
for(int j=lenght-1;j>index;j--){
if(height[j]<maxj){
res = res + maxj;
}else if(height[j]>=maxj){
maxj = height[j];
res = res + maxj;
}
}
}
}
return res;
}
}
↵