42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

元素只受左右两边最高处高度的影响

class Solution {
    public int trap(int[] height) {
        if(height == null || height.length == 0) return 0;
        int len = height.length;
        int lM = height[0],rM = height[len - 1];
        int l = 0,r = len - 1;
        int res = 0;
        while(l < r){
            if(lM < rM){
                //左指针向右移动
                if(height[l] > lM){
                    //更新lM
                    lM = height[l];
                }else{
                    res += lM - height[l++];
                }
            }else{
                if(height[r] > rM){
                    //更新rM
                    rM = height[r];
                }else{
                    res += rM - height[r--];
                }
            }
        }
        return res;
    }
}
一回生,二回熟
原文地址:https://www.cnblogs.com/zzytxl/p/12665911.html