11-27 接雨水

在这里插入图片描述
解析:
给出一组数据,数组中的数据代表当前的高度,因此本题可以按照行进行计算,也可以按照列进行计算。从给出的图可知,按列的方式会更加方便,因此想到双指针的思路,比较两端的高度,只要一边比另一边高,那么矮的那一边就是最大能力,此时计算比当前高度还要矮的所有的位置的容量。

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;
    }
};