当前位置: 首页 > 后端技术 > Python

Leetcode42.接收雨水-python-递归寻找分水岭

时间:2023-03-26 01:03:16 Python

https://leetcode-cn.com/probl...题目总结了黑色的是柱子,蓝色的是水。找出它可以容纳多少水。解决方法有很多,比如扫描数组,从每个位置向左右计算最高列的高度。O(n)时间复杂度以下的解就是找分水岭,比如从左到右遍历,只要找到第一个高度大于最左边的列,就是分水岭,水位前面可以在这个时候确定。那么后者与前者无关,递归执行算法。最后一段,可能没有更高的柱子,找不到分水岭,但是可以直接倒数组,递归调用一次。类解决方案:deftrap(self,height:List[int])->int:cnt=len(height)ifcnt<3:return0ifcnt==3:ifheight[0]>height[1]0:breakhl=height[l]cur=l+1f=Falsev=0whilecur