题目
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
代码
class Solution {
public int trap(int[] height) {
int left =0 ,right =height.length-1;
int l_max=0,r_max=0;//记录目前最高
int res =0;
while (left<right){
l_max=Math.max(height[left],l_max);
r_max=Math.max(height[right],r_max);
if (l_max<r_max){//右边比较高,说明左边最高就是木桶的短板
res+=l_max-height[left];//判断当前结点能否蓄水
left++;//左移,右边不用动
}else {//跟前面反过来
res+=r_max-height[right];
right--;
}
}
return res;
}
}
要点
- 使用双指针法边走边算
- 根据木桶效应,我们计算结果时候,每次只更新最大值比较小的一侧