我们得先观察到,下标为i的位置,储水量为:i左侧的最大值与i右侧的最大值中小的那个再减去i的高度。我们先预处理获取每个i左侧的最大值与最小值即可
// 冲刺010
class Solution {
public int trap(int[] height) {
int len = height.length;
int ans = 0;
int[] leftMax = new int[len];
int[] rightMax = new int[len];
leftMax[0] = rightMax[len - 1] = 0;
for (int i = 1; i < len; i++) {
leftMax[i] = Math.max(leftMax[i - 1], height[i - 1]);
}
for (int i = len - 2; i >= 0; i--) {
rightMax[i] = Math.max(rightMax[i + 1], height[i + 1]);
}
for (int i = 0; i < len; i++) {
int temp = Math.min(leftMax[i], rightMax[i]) - height[i];
ans += temp >= 0 ? temp : 0;
}
return ans;
}
}