题目描述
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
思路
用左右两个指针从两头往中间走。在走的过程中,顺便记录下左边遇到的最高值 (lMax) 和右边遇到的最高值 (rMax)。
如果 lMax < rMax,那么对于左边指针 left 来说,它能接多少水只取决于 lMax (因为右边已经有一个比 lMax 更高的 rMax 在兜底了),这个时候就可以确定left所指坐标的积水量。
代码
java
class Solution {
public int trap(int[] height) {
int ans = 0;
int lmax = 0, rmax = 0;
int l = 0, r = height.length - 1;
while(l < r){
lmax = Math.max(lmax,height[l]);
rmax = Math.max(rmax,height[r]);
if(lmax < rmax){
ans += lmax-height[l];
l++;
}else{
ans += rmax-height[r];
r--;
}
}
return ans;
}
}