给定 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
解题思路
1、单调栈
2、每个柱子可以接水的数量取决于左侧最高柱子与右侧最高柱子的最小值与该柱子的差
代码
class Solution:
def trap(self, height: List[int]) -> int:
height_rev=height[::-1]
height_max_list=[]
height_rev_max=[]
max_height=0
for h in height:
if h>max_height:
max_height=h
height_max_list.append(max_height)
max_height = 0
for h in height_rev:
if h>max_height:
max_height=h
height_rev_max.append(max_height)
height_rev_max=height_rev_max[::-1]
res=0
for i in range(len(height)):
cur_height=min(height_max_list[i], height_rev_max[i]) - height[i]
if cur_height>0:
res+=cur_height
return res