zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    工作所得所思之一
    angular路由
    html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    您无权输入许可证密钥,请请使用系统管理员账户重试
    nginx的配置说明
    flexbox弹性盒子模型
    移动web开发规范
    为什么要使用响应式开发
    移动web开发
    如何给图片做缓存
  • 原文地址:https://www.cnblogs.com/venvive/p/13449999.html
Copyright © 2011-2022 走看看