[LeetCode练习]接雨水

[LeetCode练习]接雨水

先记录一下答案:https://www.jianshu.com/p/49b5cf98b216

public int trapRainWater(int[] A) {
    if(A == null || A.length < 3)
        return 0;

    //两根指针一头一尾向中间进发
    int left = 0;
    int right = A.length-1;
    //两个变量存储左右两边的局部最大高度
    int leftMax = 0;
    int rightMax = 0;

    int area = 0;

    while(left <= right) {
        leftMax = Math.max(leftMax, A[left]);
        rightMax = Math.max(rightMax, A[right]);

        //小的那边可以存水
        if(leftMax <= rightMax) {
            if(leftMax > A[left])
                area += leftMax - A[left];
            left++;
        }
        else {
            if(rightMax > A[right])
                area += rightMax - A[right];
            right--;
        }
    }

    return area;
}