zoukankan      html  css  js  c++  java
  • LeetCode Trapping Rain Water

    LeetCode解题之Trapping Rain Water


    原题

    计算一个凹凸不平的模型中能够存放多少的雨水。

    以下图为例,黑色的地方是砖块。蓝色的地方是积水。

    rainwatertrap

    注意点:

    • 给的參数数组表示的是砖块的高度(它自身也要占面积),不仅仅是边
    • 不会存在负数的情况

    样例:

    输入: height = [0,1,0,2,1,0,1,3,2,1,2,1]
    输出: 6

    注:详细看上图

    解题思路

    这题与 Container With Most Water 很类似,但那题仅仅须要求出面积最大的积水处。而如今要找到全部的积水处的总和。如今考虑随意的一个块砖它上面终于的积水高度是怎样求的,我们须要找到它左右两边的最高的砖块,而它终于的高度就是这两个砖块中较矮的那个。全部我们须要先遍历来得到每一个砖块左右最高砖块的高度,最后依据这两个高度来确定终于的高度。以下的代码先从后往前遍历得到右边的最高高度。然后从前往后遍历得到左边的最高高度,同一时候得到两者中小的一个增加总和。

    AC源代码

    class Solution(object):
        def trap(self, height):
            """
            :type height: List[int]
            :rtype: int
            """
            if not height:
                return 0
            length = len(height)
            maxh = [0 for __ in range(length)]
            h = height[length - 1]
            for i in range(length - 2, -1, -1):
                maxh[i] = h
                h = max(h, height[i])
    
            h = height[0]
            result = 0
            for i in range(1, length - 1):
                h = max(h, height[i])
                result += max(0, min(h, maxh[i]) - height[i])
            return result
    
    
    if __name__ == "__main__":
        assert Solution().trap([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]) == 6

    欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源代码。

  • 相关阅读:
    C++编译器详解(二)常见precompiling 指令介绍
    C++编译器详解(一)
    Music
    jQuery语法
    Freedom DownTime
    A
    Map类
    伤不起:File.toPath() & Paths.get()
    在不同浏览器中空格显示的效果不一致的问题(主要是宽度不一致)
    关于xmlhttp会使用ie的缓存的问题及解决
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7191951.html
Copyright © 2011-2022 走看看