給定 n 個非負整數表示每一個寬度爲 1 的柱子的高度圖,計算按此排列的柱子,下雨以後能接多少雨水。數組
上面是由數組 [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;
}
}
複製代碼