题目描述:
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例:
基础思路:
1.将题目中的雨水总数分为每一个位置i上的雨水数,这个位置i上能否接到雨水,在于这个位置左边和右边的最大值能否比height[i]大,当两边都比height[i]大时,即可直接计算这个位置i上的雨水量,即为min(leftMax, rightMax) - height[i]
代码运行:
class Solution{
public:
int trap(vector<int>& height){
int ans=0;
int l=0,r=height.length()-1;
int lmax=0,rmax=0;
while(l<r){
lmax=max(lmax,height[l]);
rmax=max(rmax,height[r]);
if(lmax>=rmax){
ans+=rmax-height[r];
r--;
}else {
ans+=lmax-height[l];
l++;
}
}
return ans;
}
};