Leetcode: NO.42 接雨水

題目

題目鏈接: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;
    }
}

結果

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章