目录
- 一、题目
- 二、解法
- 完整代码
一、题目
给定 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
二、解法
可以把水分隔开,相当于m
个水柱,把所有的水柱加在一起就好了。
图看懂了,接下来就很简单了,left
数组和right
数组,分别记录每个点的左边的最高值,和右边的最高值
当我们到i的时候,i
左边的最高值left[i]
就是i-1
时遇到的最高值以及i
的柱子高度
完整代码
class Solution:
def trap(self, height: List[int]) -> int:
n = len(height)
left = [height[0]] * n
right = [height[-1]] * n
for i in range(1, n):
left[i] = max(left[i - 1], height[i])
right[n - i - 1] = max(right[n - i], height[n - i - 1])
res = 0
for i in range(n):
col = min(left[i], right[i]) - height[i]
res += col
return res