思路:对于每个位置,分别找到左边和右边的最大值,左右最大值的较小者为接水的桶的边,边减去当前位置的高度即为当前位置接到雨水的量。
我的代码
class Solution {
public int maxRight(int[] height,int start){
int len = height.length;
int max=0;
for(int i=start;i<len;i++){
max = Integer.max(max, height[i]);
}
return max;
}
public int trap(int[] height) {
int l_max = height[0],r_max=maxRight(height,2);
int shui=0;
int bian;
for(int i=1; i<height.length; i++){
bian = Integer.min(l_max,r_max);
if(bian>height[i]){
shui+= bian-height[i];
}
l_max = Integer.max(l_max,height[i]);
r_max = maxRight(height, i+2);
}
return shui;
}
}
运行结果