给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。
示例:
输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/trapping-rain-water
思路:直接单点结算 记录左边右边的最大值 谁小先结算哪一边 如果当前值比最大值小就把差加到结果里 如果当前值大于最大值就更新最大值
class Solution {
public int trap(int[] height) {
int res=0;
if(height==null||height.length<3)
return res;
int maxL=height[0];
int maxR=height[height.length-1];
int l=1;
int r=height.length-2;
while(l<=r){
if(maxL<=maxR){
res+=maxL-height[l]>0?maxL-height[l]:0;
if(height[l]>maxL)
maxL=height[l];
l++;
}
else if(maxR<maxL){
res+=maxR-height[r]>0?maxR-height[r]:0;
if(height[r]>maxR)
maxR=height[r];
r--;
}
}
return res;
}
}