zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):042-Trapping Rain Water

    题目来源:

      https://leetcode.com/problems/trapping-rain-water/


    题意分析:

      输入一组数组,代表一个宽度为1的高度地图。问,这个地图在雨后可以收集多少水。例如,输入一个数组[0,1,0,2,1,0,1,3,2,1,2,1],返回的是6.如图所示:


    题目思路:

      这道题目虽然说是hard难度的题目,但是其实不是很难。不难发现,水都是从最高那个数起和第二高数之间。那么这题可以分成两部。①找到数组的最大值。②计算最大值左边和右边分别可以收集多少水;计算左边的时候,首先找到左边最靠左的高度,计算它和最高数之间收集的水和第二高往左的和,形式化表示就是f(i) = w(i,j) + f(j),f(i)代表从i往左收集的水,w(i,j)代表i和j之间收集的水。w(i,j)和容易算,就是i到j之间第二高减去原来高度之和;右边计算类似。时间复杂度是(O(n))。


    代码(python):

      

     1 class Solution(object):
     2     def left(self,height,i):
     3         if i == 0:
     4             return 0
     5         n = i - 1;mi = n;maxh = height[mi]
     6         while n >= 0:
     7             if height[n] >= maxh:
     8                 maxh = height[n];mi = n
     9             n -= 1
    10         ans = 0;k = mi
    11         while k < i:
    12             ans += maxh - height[k]
    13             k += 1
    14         return ans + self.left(height,mi)
    15     def right(self,height,i):
    16         size = len(height)
    17         if i == size - 1:
    18             return 0
    19         n = i + 1; mi = n;maxh = height[mi]
    20         while n < size:
    21             if height[n] >= maxh:
    22                 maxh = height[n];mi = n
    23             n += 1
    24         ans = 0;k = mi
    25         while k > i:
    26             ans += maxh - height[k];k -=1
    27         return ans + self.right(height,mi)
    28     def trap(self, height):
    29         """
    30         :type height: List[int]
    31         :rtype: int
    32         """
    33         s = len(height)
    34         if s == 0:
    35             return 0
    36         mh = height[0];m = 0; i = 1
    37         while i < s:
    38             if height[i] >= mh:
    39                 mh = height[i];m = i
    40             i += 1
    41         return self.left(height,m) + self.right(height,m)
    42         
    View Code

    转载请注明出处:http://www.cnblogs.com/chruny/p/4934365.html

  • 相关阅读:
    第9天 图片整合
    第六天 元素类型
    第五天 文本溢出
    第四天 盒子模型
    第三天 css核心属性
    第二天 css基础 ,部分选择符
    第一天 HTML基础
    *Move Zeroes
    Word Pattern
    ReentrantLock
  • 原文地址:https://www.cnblogs.com/chruny/p/4934365.html
Copyright © 2011-2022 走看看