
分别计算左右边界 o(N) o(N)
class Solution {
    public int trap(int[] height) {
        /*
            分别考虑每一个高度为底的情况,当前高度所能盛水量等于左侧边界和右侧边界高度中最小值减去当前元素高度
        */
        int size = height.length;
        int[] left = new int[size];
        int[] right = new int[size];
        //计算每一个元素左侧的边界
        int maxH = 0;
        for(int i = 0; i < size; i++){
            maxH = Integer.max(maxH,height[i]);
            left[i] = maxH;
        }
        //计算每一个元素右边界
        maxH =0;
        for(int i = size-1;i>=0; i--){
            maxH = Integer.max(maxH,height[i]);
            right[i] = maxH;
        }
        int num = 0;
        for(int i = 0; i < size; i++){
            num += Integer.min(left[i],right[i]) - height[i];
        }
        return num;
    }
}