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
    
  • 相关阅读:
    最简单跳转,待反混爻的合集
    搜索引擎劫持代码
    Warning: Cannot modify header information
    editplus 正则删换行
    在全程Linux環境部署IBM Lotus Domino/Notes 8.5
    3.5-杂项②
    3.4-杂项①
    3.3-ISDN
    3.2-帧中继②
    3.2-帧中继①
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14613899.html
Copyright © 2011-2022 走看看