給定 n 個(gè)非負(fù)整數(shù)表示每個(gè)寬度為 1 的柱子的高度圖贞奋,計(jì)算按此排列的柱子抱究,下雨之后能接多少雨水铝条。
LeetCode: https://leetcode.cn/problems/trapping-rain-water/submissions/
class Solution {
func trap(_ height: [Int]) -> Int {
guard height.count > 2 else { return 0 }
// 左右做高點(diǎn)
var maxL = height.first!
var maxR = height.last!
// 左右指針
// 雙指針從左右分別向中間移動(dòng)糖荒,遇到高點(diǎn)更新高點(diǎn)杉辙,遇到低點(diǎn)更新水量
var L = 0
var R = height.count - 1
// 結(jié)果
var res = 0
while L < R {
if maxL <= maxR {
// 左邊高點(diǎn)比右邊矮,則左邊指針右移
L += 1
if height[L] >= maxL {
// 遇到左側(cè)新高
maxL = height[L]
} else {
// 遇到左側(cè)低點(diǎn)捶朵,則形成洼地蜘矢,儲(chǔ)水增加
res += maxL - height[L]
}
} else {
// 右邊高點(diǎn)比左邊矮,則右邊指針左移
R -= 1
if height[R] >= maxR {
// 遇到右側(cè)新高
maxR = height[R]
} else {
// 遇到右側(cè)低點(diǎn)综看,則形成洼地品腹,儲(chǔ)水增加
res += maxR - height[R]
}
}
}
return res
}
}