Leetcode - 接雨水

https://leetcode-cn.com/problems/trapping-rain-water/

題目描述

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

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

示例:

輸入: [0,1,0,2,1,0,1,3,2,1,2,1]
輸出: 6

解題思路

找到最高的那個柱子,把數組分成兩部分,對於兩部分都已經確定了一個邊界高度了,所以對剩餘的每個柱子至於確定一邊的邊界高度值,就可以直接計算出能接的雨水了。

int trap(int* height, int heightSize) {
    int h, t = 0, ans = 0, max = height[0];
    for (int i = 1; i < heightSize; i++) {
        if (height[i] > max) {
            max = height[i];
            t = i;
        }
    }
    h = height[0];
    for (int i = 1; i < t; i++) {
        if (h > height[i])
            ans += h - height[i];
        else  h = height[i];
    }
    h = height[heightSize - 1];
    for (int i = heightSize - 2; i > t; i--) {
        if (h > height[i])
            ans += h - height[i];
        else  h = height[i];
    }
    return ans;
}

 

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