接雨水
给定 n 个非负整数表示每个宽度为 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
题解


python code
class Solution:
def trap(self, height: List[int]) -> int:
# 记录柱子的个数
length = len(height)
# 记录每个柱子左侧最大高度
l_list = list()
# 记录每根柱子右侧最大高度
r_list = list()
# 默认第一个柱子的 左侧最大高度为0
l_height = 0
# 默认最后一个柱子的 右侧最大高度为0
r_height = 0
# 计算每根柱子左侧的最大高度
for val in height:
if not l_list:
l_list.append(l_height)
l_height = val
else:
l_list.append(l_height)
if val > l_height:
l_height = val
# 计算每根柱子右侧的最大高度
for i in range(length-1, -1, -1):
if not r_list:
r_list.append(r_height)
r_height = height[i]
else:
r_list.append(r_height)
if height[i] > r_height:
r_height = height[i]
r_list = r_list[::-1]
result = 0
# 循环遍历
for k, v in enumerate(height):
# 取左边最大高度 和 右边最大高度的最小值 减去 当前元素的值
# 如果小于0 则赋值为0 如果大于0 则为当前柱子的存水量
num = min(r_list[k], l_list[k]) - v
val = num if num > 0 else 0
result += val
return result
2187



被折叠的 条评论
为什么被折叠?



