(LeetCode 42)接雨水 思維題

2021-08-27 16:28:19 字數 850 閱讀 3519

42.接雨水

給定 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

分析:

(我們可以將每個黑色的高度看成有高度的柱子)

假設以第i個柱子為接水的起始邊界,那麼可以分為兩種情況:

1:柱子 i 後面存在柱子 j ,其高度大於等於柱子 i,我們可以以height[i]為較低邊界,在[i,j]之間接水。

那麼柱子[i,j]之間可接水: (j - i - 1)* height[i] - sum(i,j) ,其中sum(i,j)表示(i,j)之間柱子的高度之和,不包括i,j。

2:柱子 i 後面不存在高度大於等於height[i]的柱子 ,並假設 i 後面的柱子的最大高度為 height[j] = t, 我們可以以height[i]為較高邊界,在[i,j]之間接水。

那麼柱子[i,j]之間可接水: (j - i - 1)* t - sum(i,j) 。

ac**:

class solution 

else

}return ans;}};

LeetCode 42 接雨水 困難

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的高度圖,在這種情況下,可以接 6 個單位的雨水 藍色部分表示雨水 感謝 marcos 貢獻此圖。示例 輸入 0,1,0,2,1,0,1...

LeetCode 42 接雨水 Java實現

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的高度圖,在這種情況下,可以接 6 個單位的雨水 藍色部分表示雨水 感謝 marcos貢獻此圖。示例 輸入 0,1,0,2,1,0,1,...

Leetcode 42 接雨水(棧解)

題目描述 定 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 ...