解析:
给出一组数据,数组中的数据代表当前的高度,因此本题可以按照行进行计算,也可以按照列进行计算。从给出的图可知,按列的方式会更加方便,因此想到双指针的思路,比较两端的高度,只要一边比另一边高,那么矮的那一边就是最大能力,此时计算比当前高度还要矮的所有的位置的容量。
class Solution {
public:
int trap(vector<int>& height) {
int len = height.size();
int ans = 0;
int left = 0, right = len - 1;
int max_left = 0, max_right = 0;
while( left <right)
{
max_left = max(max_left, height[left]);
max_right = max(max_right, height[right]);
if(max_left < max_right)
{
ans += (max_left - height[left++]);
}else
{
ans += (max_right - height[right--]);
}
}
return ans;
}
};