基本思路是找到左边最大,右边最大,取小值减去当前值,得到当前值可乘雨水,累加。时间复杂度O(n^2)。比较慢。
class Solution {
public:
int trap(vector<int>& height) {
int sum=0;
for(int i=1;i<height.size();i++){
int l=i, r=i;
int max_r=height[i],max_l=height[i];
while(l>0){
if(height[l-1]>max_l)
max_l=height[l-1];
l--;
}
while(r<height.size()-1){
if(height[r+1]>max_r)
max_r=height[r+1];
r++;
}
sum+=min(max_l,max_r)-height[i];
}
return sum;
}
};