zoukankan      html  css  js  c++  java
  • 接雨水

    42. 接雨水

    给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

    上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。

    示例:

    输入: [0,1,0,2,1,0,1,3,2,1,2,1]
    输出: 6
    
    # 暴力法,当前位置 与 其左右最大值的最小值  之差
    def trap(height):
        if not height:
            return 0
        ans = 0
        for i in range(1,len(height)):
            maxleft,maxright = 0,0
            for j in range(i+1):
                maxleft = max(maxleft,height[j])
            for j in range(i,len(height)):
                maxright = max(maxright,height[j])
            ans += min(maxleft,maxright)-height[i]
        return ans
    
    #动态编程 存储最大值
    def trap(height):
        if not height:
            return 0
        ans = 0
        maxleft,maxright = [0]*len(height),[0]*len(height)
        maxleft[0] = height[0]
        maxright[-1] = height[-1]
        
        for i in range(1,len(height)):
            maxleft[i] = max(maxleft[i-1],height[i])
        
        for i in range(len(height)-2,-1,-1):
            maxright[i] = max(maxright[i+1],height[i])
            
            
        for i in range(1,len(height)):
            ans += min(maxleft[i],maxright[i])-height[i]
        return ans,maxleft,maxright
    
    # 双指针 一次遍历
    def trap(height):
        ans = 0
        left,right = 0,len(height)-1
        leftmax,rightmax = 0,0
        
        while left<right:
            if height[left] < height[right]:
                if height[left] > leftmax:
                    leftmax = height[left]
                else:
                    ans += leftmax - height[left]
                left += 1
            else:
                if height[right] > rightmax:
                    rightmax = height[right]
                else:
                    ans += rightmax - height[right]
                right -= 1
        return ans
    
  • 相关阅读:
    JavaScript中的String对象
    JavaScript中String对象处理HTML标记中文本的方法
    JavaScript中的Array对象
    JavaScript对象基础知识
    开机后显示显示‘无信号’
    JavsScript的基本特点
    ASP.NET中默认的一级目录
    MVC每层的职责
    PHP sql注入漏洞修复(数字型)
    python self的含义
  • 原文地址:https://www.cnblogs.com/gongyanzh/p/12617653.html
Copyright © 2011-2022 走看看