接雨水

給定 n 個非負整數表示每一個寬度爲 1 的柱子的高度圖,計算按此排列的柱子,下雨以後能接多少雨水。數組

img

上面是由數組 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度圖,在這種狀況下,能夠接 6 個單位的雨水(藍色部分表示雨水)。 感謝 Marcos 貢獻此圖。bash

示例:ui

輸入: [0,1,0,2,1,0,1,3,2,1,2,1]
輸出: 6
複製代碼

解題思路: 建兩個數組maxL maxR,maxL數組保存從左到右的最大高度 , maxR保存從右到左的最大高度;而後遍歷height數組 ,每一個位置的雨水高度爲 maxL和 maxR的最小值 - 當前高度。spa

class Solution {
    public int trap(int[] height) {
        int len = height.length - 1;
        int[] maxR = new int[ len + 1];
        int[] maxL = new int[ len + 1];
        int max1 = 0 , max2 = 0;
        for( int i = len  ; i >= 0 ; i-- ){
            max1 = Math.max( max1 , height[ i ] );
            maxR[ i ] = max1;
            max2 = Math.max( max2 , height[len - i ] );
            maxL[ len -  i ] = max2;
        }
        int res = 0;
        for( int i = 0 ; i <= len ; i++ ){
            int min = Math.min( maxL[ i ] , maxR[ i ] );
            res += min - height[ i ];
       }
        return res;
    }
}
複製代碼
相關文章
相關標籤/搜索