此题是从两边往中间靠拢,这题的思路是这样子的:假如左端的高度比右端高,那么左端作为第一个高度,右端作为第二高度,从右端开始往左端扫描,只要碰到比第二高度低的点就加水柱的高度,如果碰到高的点,那么将这个点作为第一个高,原来的左端的高点作为第二高度点(这是必须第二高,否则不然将这个作为第一高度的点了),此时点从左端开始扫描到右端,相应加水柱,一次类推。
class Solution {
public:
int trap(vector<int>& height) {
int size=height.size();
int left=0;
int right=size-1;
int secHeight=0;
int area=0;
while(left<right){
if(height[left]<height[right]){
secHeight=max(secHeight,height[left]);
area+=(secHeight-height[left]);
left++;
}
else{
secHeight=max(secHeight,height[right]);
area+=(secHeight-height[right]);
right--;
}
}
return area;
}
};