class Solution {
public:
int trap(vector<int>& height) {
int max=0,left=0,right=height.size()-1,answer=0;
for(int i=0;i<height.size();i++){
max = height[i]>height[max]?i:max;
}
int leftm=0,rightm=0;
while(left<max){
leftm=height[left]>leftm?height[left]:leftm;
if(height[left]<leftm) answer+=leftm-height[left];
left++;
}
while(max<right){
rightm=height[right]>rightm?height[right]:rightm;
if(height[right]<rightm) answer+=rightm-height[right];
right--;
}
return answer;
}
};
先找到最大值,然后从两边分别向最大值扫描,以右边为例,设置右边当前扫描过的最大值为rightm,如果某个值小于它,则它的雨水容量就是height[i]-rightm。