• 接雨水


    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
    
  • 相关阅读:
    鼠标拖放div 实现
    layerX offsetX pageX
    960 grid 使用
    960 grid 分析
    WebMatrix安装和使用
    Sass使用教程
    CSS预处理器实践之Sass、Less比较
    node.js 入门教程(beginnder guide
    node.js NPM 使用
    《Head First 设计模式》学习笔记——状态模式
  • 原文地址:https://www.cnblogs.com/gongyanzh/p/12617653.html
Copyright © 2020-2023  润新知