zoukankan      html  css  js  c++  java
  • 42. Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

    avatag

    The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

    Example:

    Input: [0,1,0,2,1,0,1,3,2,1,2,1]
    Output: 6

    Solution1:(TLE)

    class Solution:
        def trap(self, height):
            """
            :type height: List[int]
            :rtype: int
            """
            res = 0
            for i in range(1,len(height)-1):
                maxleft,maxright = 0,0
                for j in range(i,-1,-1):
                    maxleft = max(maxleft,height[j])
                for j in range(i,len(height)):
                    maxright = max(maxright,height[j])
                res += min(maxright,maxleft) - height[i]
                # print('i',i,'maxleft',maxleft,'maxright',maxright,'ans',min(maxright,maxleft) - height[j])
            return res
    

    每个位置的组左右高度,不是其相邻位置的高度,而是整个左边部分和右边部分的最大值

    Solution2:

    class Solution:
        def trap(self, height):
            """
            :type height: List[int]
            :rtype: int
            """
            if len(height)==0:
                return 0
            res = 0
            leftmax = [0 for i in range(len(height))]
            rightmax = [0 for i in range(len(height))]
            leftmax[0] = height[0]
            for i in range(1,len(height)):
                leftmax[i] = max(height[i],leftmax[i-1])
            rightmax[-1] = height[-1]
            for i in range(len(height)-2,-1,-1):
                rightmax[i] = max(height[i],rightmax[i+1])
            for i in range(1,len(height)-1):
                res += min(leftmax[i],rightmax[i])-height[i]
            return res
    

    先用动态规划求出每个点的情况,然后再算。

  • 相关阅读:
    C++函数四( 具有默认参数值的函数)
    C++函数三(内联函数和函数重载)
    C++函数二(函数的嵌套调用和递归调用)
    C++关于函数声明定义的位置
    C++函数一(标准库函数,自定义函数)
    C++扑克牌发牌游戏程序(包括C++随机数的解释)
    C++数组二(字符数组)
    C++数组一
    C++程序流程结构
    C++运算符与表达式
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9794359.html
Copyright © 2011-2022 走看看