????????????????????????
????Hello,大家好我是Dream,欢迎大家来到刷题乐园????????????
????游园须知:这片乐园从不缺乏天才,努力才是你的最终入场券!????????????
????导游主要使用Python语言,同时欢迎其他语言的小伙伴进来玩耍
☀️☀️☀️
????游园过程中,如果发现有错误的话,欢迎大家评论区及时斧正❤️❤️❤️
????最后,祝大家游园愉快,一起加油进步????????????
????????????游园路线图:
- ????乐园描述
- ????游园准备
- ????开始游玩
- ????游玩总结
- ????????????最后的福利
????乐园描述
给定 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
0 <= n <= 3 * 104
0 <= height[i] <= 105
????游园准备
思路:
- 利用左右指针的下标差值计算出每一行雨水+柱子的体积,如图第一行体积为11,第二行为8,第三行为1。累加得到整体体积tmp=20(每一层从左边第一个方格到右边最后一个方格之间一定是被蓝黑两种颜色的方格填满的,不会存在空白,这也是为什么能按层求的关键)
- 计算柱子体积,为height:[0,1,0,2,1,0,1,3,2,1,2,1] 数组之和SUM=14(也可以直接用sum()函数,不过时间复杂度就是O(2n)了)
- 返回结果 tmp-SUMtmp−SUM就是雨水的体积
具体实现:
1.先将整体视为三层
2.当左右指针指向的区域高度小于high时,左右指针都向中间移动,直到指针指向区域大于等于high的值。若不小于high,则指针不移动。
3.第二层:
4.第三层:
????开始游玩
def jieshui(height):
n=len(height)
left,right=0,n-1
height_max=max(height)
high=1
Sum=0
while(left<=right and high<=height_max):
while (height[left]<high):
left+=1
while (height[right]<high):
right-=1
high+=1
Sum+=right-left+1
result=Sum-sum(height)
return result
print(jieshui([0,1,0,2,1,0,1,3,2,1,2,1]))
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
????游玩总结
The stage extends as far as the heart goes~加油!❤️❤️❤️
**????今天是我打卡的第十三天,希望每天都能见到最棒的你????**
????????????最后的福利
????????????最后一点小福利带给大家:如果想快速上手python的小伙伴们,这个详细整理PPT可以迅速帮助大家打牢python基础,需要的小伙伴们可以下载一下 Python入门基础教程全套+小白速成+学不会来找我! ????????????
还有自制表白神器,需要自取:
Python表白神器,源码+解析+各种完美配置+浪漫新颖 ????????????
???????????? 好啦,这就是今天要分享给大家的全部内容了
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~