zoukankan      html  css  js  c++  java
  • LeetCode 42. 接雨水

    42. 接雨水

    Difficulty: 困难

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

    示例 1:

    输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
    输出:6
    解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 
    

    示例 2:

    输入:height = [4,2,0,3,2,5]
    输出:9
    

    提示:

    • n == height.length
    • 0 <= n <= 3 * 10<sup>4</sup>
    • 0 <= height[i] <= 10<sup>5</sup>

    Solution

    只要知道柱子i位置最多能盛的水等于这个柱子的左边和右边格子最大值中的最小值min(l[i], r[i])减去height[i],如果提前把每个柱子的左边和右边的最大l[i]和最大值r[i]提前求出来,然后就能很快速地把每个柱子最多能盛的水算出来。

    class Solution:
        def trap(self, height: List[int]) -> int:
            n = len(height)
            if n == 0:
                return 0
            
            l = [height[0]] + [0] * (n - 1)
            r = [0] * (n - 1) + [height[-1]]
            
            for i in range(1, n):
                l[i] = max(height[i], l[i-1])
            
            for j in range(n-2, -1, -1):
                r[j] = max(height[j], r[j+1])
            
            res = 0
            for k in range(n):
                res += min(l[k], r[k]) - height[k]
            return res
    
  • 相关阅读:
    十个男人看了,九个成了富人
    win7下编译安装osgearth
    gdal源码编译安装
    win7下编译boost库总结
    everything && executor
    cursor:hand与cursor:pointer的区别介绍
    web程序记录当前在线人数
    汉字转拼音
    40多个非常有用的Oracle 查询语句
    asp.net 使用IHttpModule 做权限检查 登录超时检查(转)
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14613899.html
Copyright © 2011-2022 走看看