把图中蓝色的水部分也看成实心,我们只需要计算出总的面积再减去黑色部分即可
总的面积可以先一层一层的去计算,每一层定一个左右指针,找到当前大于等于当前高度的指针,然后当前层的面积就是 R - L + 1 然后再一层一层的计算即可,直到最高层
public int trap(int[] height) {
int heightSum = 0;
int max_height = 0;
for(int i = 0; i < height.length; i++) {
heightSum += height[i];
max_height = Math.max(max_height,height[i]);
}
int sum = 0;
for(int h = 1; h <= max_height; h++) {
int l = 0, r = height.length - 1;
while(height[l] < h && l < r)
l++;
while(height[r] < h && r > l)
r--;
sum += r - l + 1;
}
return sum - heightSum;
}
}