接雨水

54 阅读1分钟

接雨水

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

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 示例 2:

输入:height = [4,2,0,3,2,5] 输出:9

提示:

n == height.length 1 <= n <= 2 * 104 0 <= height[i] <= 105

class Solution {
    public int trap(int[] height) {
        int len=height.length;
        int[] a=new int[len];
        int[] b=new int[len];
        int ans=0;
        a[0]=height[0];
        b[len-1]=height[len-1];
        for(int i=1;i<len;i++){
            a[i]=Math.max(height[i],a[i-1]);
        }
        for(int i=len-2;i>=0;i--){
            b[i]=Math.max(height[i],b[i+1]);
        }
        for(int i=0;i<len;i++){
            ans+=Math.min(a[i],b[i])-height[i];
        }
        return ans;
    }
}

class Solution {
    public int trap(int[] height) {
        int a=0,b=0;
        int l=0,r=height.length-1;
        int ans=0;
        while(l<r){
           a=Math.max(a,height[l]);
           b=Math.max(b,height[r]);
            ans+=a<b?(a-height[l++]):(b-height[r--]);
        }
        return ans;
    }
}