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
    
  • 相关阅读:
    Typesceipt声明文件
    Hadoop综合大作业
    分布式并行计算MapReduce
    安装关系型数据库MySQL 安装大数据处理框架Hadoop
    爬虫综合大作业
    爬取全部的校园新闻
    爬取全部的校园新闻
    获取一篇新闻的全部信息
    理解爬虫原理
    中文词频统计
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14613899.html
Copyright © 2011-2022 走看看