42.接雨水
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。
题解:双指针法
总归他的算式公式是:min(max_left,max_right)-height[i],i为当前位置index,max_left为左边最大的高度,max_right为右边最大的高度的累加
1、双指针法:从左往右,从右向左
2、判断height长度大于0
3、规定定义左右的下标位置,也可以是当前位置的index,left=0,right=len(height)-1
4、规定定义左右的最大值分别为:max_left=height[0],max_right=height[len(height)-1]
5、left下标不应该超过right
6、每次都要更新max_left、max_right,使用上次的最大值和当前位置height[left/right]
6、max_left < max_right,装水获得的高度=max_left-height[left](当前位置) 反正就是取左右最大值的最小值
left位置加1
反之装水获得的高度=max_right-height[right](当前位置)
解法
class Solution:
def trap(self, height: List[int]) -> int:
n = len(height)
if not n:
return 0
left,right=0,n-1
asc=0
maxleft,maxright = height[0],height[n-1]
while left<=right:
maxleft = max(height[left],maxleft)
maxright = max(height[right],maxright)
if maxleft<maxright:
asc+=maxleft-height[left]
left+=1
else:
asc+=maxright-height[right]
right-=1
return asc