给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
python
class Solution(object):
def trap(self, height):
# 初始化双指针
left = 0
right = len(height) - 1
# 初始化左边和右边的最大高度
left_max = right_max = 0
res = 0
while left < right:
if height[left] < height[right]:
# 左边更小,水量由左边决定
if height[left] >= left_max:
# 更新左边的最大高度
left_max = height[left]
else:
res += left_max - height[left]
left += 1
else:
# 右边更小,水量由右边决定
if height[right] >= right_max:
# 更新右边的最大高度
right_max = height[right]
else:
res += right_max - height[right]
right -= 1
return res
需要明确怎么才能存不住水:取决于哪边的水高更小,水量就由哪边决定。
那如何计算水量就需要通过最大高度-当前的水高,如果当前水高更高,就需要更新最大高度。