題目
題目鏈接:https://leetcode-cn.com/problems/trapping-rain-water
給定 n 個非負整數表示每個寬度爲 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。
上面是由數組 [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位,具體邏輯見代碼:
class Solution {
public static int trap(int[] height) {
int counter = 0;
for (int i=0; i<height.length-2; i++){
if (height[i] <= height[i+1]) continue;
marker:for (int sub_height = height[i]; sub_height>height[i+1]; sub_height--){
int subCounter = 0;
for (int j=i+1; j<height.length; j++) {
if (height[j]>=sub_height){
counter += subCounter;
i = j-1;
break marker;
}
subCounter += sub_height - height[j];
}
}
}
return counter;
}
}