Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.
上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
Example:
Input: [0,1,0,2,1,0,1,3,2,1,2,1]
Output: 6
C++ 双指针解法 Two Pointers
class Solution{
public:
int trap(vector<int>& height){
int left = 0, right = height.size() - 1;
int ans = 0;
int left_max = 0,right_max = 0;
while(left < right){
if(height[left] < height[right] ){
height[left] >= left_max ? ( left_max = height[left] ) : ans += left_max - height[left];
left++;
}else{
height[right] >= right_max ? ( right_max = height[right] ) : ans += right_max - height[right];
right--;
}
}
return ans;
}
};