
记住就完了。。。
python
当前的水=min(left_max[i], right_max[i]) - height[i]
先从左往右遍历一遍数组,求出每个位置左边最大的高度
再从右往左遍历一遍数组,求出每个位置右边最大的高度
最后,从左往右遍历数组,每个位置当前的水=min(left_max[i], right_max[i]) - height[i]
python
class Solution:
def trap(self, height: List[int]) -> int:
n= len(height)
if not height:
return 0
# 保存每个柱子左侧的最高柱子
left_max = [] # 正向遍历时,不用[0]*n初始化也可以,直接append
for i in range(0, n, 1):
if i == 0:
left_max.append(height[0]) # 第 0 个柱子左侧最高柱子就是它自己,没有更左边的柱子
else:
left_max.append(max(left_max[i-1], height[i]))
#先初始化列表长度
right_max = [0]*n
for i in range(n-1, -1, -1): # 从右往左 # range语法左闭右开,所以中间是-1才能扫到0
if i==n-1:
right_max[i] = height[-1] # 最后一个柱子右侧最高柱子就是它自己,没有更右边的柱子
else:
right_max[i] = max([right_max[i+1], height[i]])
# 计算积水
water = 0
for i in range(n):
water += min(left_max[i], right_max[i]) - height[i]
return water