class Solution {
public int trap(int[] height) {
// 单调数组,left表示当前下标左边最高的柱子
int[] left = new int[height.length];
int[] right = new int[height.length];
// 设置left和right的初始值
left[0] = height[0];
right[height.length - 1] = height[height.length - 1];
// 对单调数组进行填充
for (int i = 1; i < height.length; i++) {
left[i] = Math.max(left[i - 1], height[i]);
right[height.length - i - 1] = Math.max(right[height.length - i], height[height.length - i - 1]);
}
int count = 0;
for (int i = 0; i < height.length; i++) {
int num = Math.min(left[i], right[i]) - height[i];
count += num >= 0 ? num : 0;
}
return count;
}
}