那個(gè)網(wǎng)站做搬家推廣比較好引流推廣營(yíng)銷(xiāo)
描述
分析
i位置能積累的雨水量,等于其左右兩邊最大高度的最小值。
為了能獲取i位置左右兩邊的最大高度。使用動(dòng)態(tài)規(guī)劃。
兩個(gè)dp數(shù)組:
- leftMax
- rightMax
其中
- leftMax[i] 代表i位置左邊的最大高度
- rightMax[i] 代表i位置右邊的最大高度
初始狀態(tài):
- leftMax[0] = 0;
- rightMax[0] =0;
填充這兩個(gè)dp數(shù)組。
那么i位置最終能存的雨水量為:min(eftMax[i] , rightMax[i]) - height[i]
遍歷所有位置,即可得到總共能接的雨水?dāng)?shù)。
代碼
class Solution {public int trap(int[] height) {int n = height.length;int[] leftMax = new int[n];int[] rightMax = new int[n];leftMax[0] = height[0];for (int i = 1; i < n; i++) {leftMax[i] = Math.max(leftMax[i - 1], height[i]);}rightMax[n - 1] = height[n - 1];for (int i = n - 2; i >= 0; i--) {rightMax[i] = Math.max(rightMax[i + 1], height[i]);}int res = 0;for (int i = 0; i < n; i++) {res += Math.min(leftMax[i], rightMax[i]) - height[i];}return res;}
}