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
原文地址:https://www.cnblogs.com/venvive/p/13449999.html