给定 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
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
if len(height) < 3:
return 0
length = len(height)
res = 0
# 最左边和最右边的值作为基准值
fl = height[0]
lr = height[length - 1]
# 两个指针分别放在基准值前
left = 1
right = length - 2
while left <= right:
# 始终找小的一边进行操作
if fl < lr:
if fl < height[left]:
fl = height[left]
else:
res += fl - height[left]
# 两指针向中间靠拢
left += 1
else:
if lr < height[right]:
lr = height[right]
else:
res += lr - height[right]
right -= 1
return res