项目场景:
给定 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
问题描述
这题可以看作一个双指针问题,使用两个数组来保存从左向右和从右向左的最大值,通过遍历调整这两个数组的值,之后利用zip函数,求高度差,因为接的雨水就是较低的柱子和此时h的差值,遍历过程中ans不管加就可以了。
class Solution:
def trap(self, height: List[int]) -> int:
n=len(height)
ans=0
if n<3:
return 0
pre_max=[0]*n
pre_max[0]=height[0]
suf_max=[0]*n
suf_max[n-1]=height[n-1]
for i in range(1,n):
pre_max[i]=max(pre_max[i-1],height[i])
for j in range(n-2,-1,-1):
suf_max[j]=max(suf_max[j+1],height[j])
for lmax,rmax,h in zip(pre_max,suf_max,height):
ans+=min(lmax,rmax)-h
return ans
以上为本篇文章的全部内容,感谢你抽出宝贵的时间阅读这篇文章。如果你有任何疑问或建议,欢迎在评论区留言,我们一起交流进步。愿你的代码之路越走越顺,生活充满阳光!