LeetCode 42. 接雨水
给定 n
个非负整数表示每个宽度为 1
的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
示例 1:
输入:height = [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] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。
示例 2:
输入:height = [4,2,0,3,2,5]
输出:9
提示:
n == height. Length
1 <= n <= 2 * 104
0 <= height[i] <= 105
代码:
class Solution(object):
def trap(self, height):
"""
:type height: List[int]
:rtype: int
"""
# 初始化左右区域的总面积
leftarea, rightarea = 0, 0
# 初始化左右两边的最大高度
leftheight, rightheight = 0, 0
# 遍历数组,计算从左到右的累加高度
for num in height:
# 更新当前左边的最大高度
leftheight = max(num, leftheight)
# 累加左边的最大高度到左区域总面积
leftarea += leftheight
# 遍历数组,计算从右到左的累加高度
for num in height[::-1]:
# 更新当前右边的最大高度
rightheight = max(num, rightheight)
# 累加右边的最大高度到右区域总面积
rightarea += rightheight
# 计算最终结果
# 总的接雨水量 = 左右区域总面积之和 - (数组长度 × 最大高度) - 数组元素总和
return leftarea + rightarea - (len(height) * max(height)) - sum(height)