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;
}