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


    题目来源


    https://leetcode.com/problems/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.

    For example, 
    Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.



    题意分析


    Input: the height of the bars as list

    Output: the volumn of the water the bars can save

    Conditions:注意到因为bar的高度不一样,所以中间的bar可以容纳一定量的水,题意就是求容纳的水的大小


    题目思路

    注意到每一个bar所能容纳的水的量,就是其左右最高的bar中的较小值减去该bar的高度,所以先建立一个leftMostHigh的list记录每一个bar之前的最高bar值,然后从后往前遍历,一边更新右边最高的bar值,同时计算每一个bar所能容纳的水量


    AC代码(Python)


     1 _author_ = "YE"
     2 # -*- coding:utf-8 -*-
     3 
     4 class Solution(object):
     5     def trap(self, height):
     6         """
     7         :type height: List[int]
     8         :rtype: int
     9         """
    10         l = len(height)
    11         leftMostHigh = [0 for i in range(len(height))]
    12         leftmax = 0
    13         for i in range(l):
    14             leftMostHigh[i] = leftmax
    15             if height[i] > leftmax:
    16                 leftmax = height[i]
    17 
    18         rightmax = 0
    19         sum = 0
    20         for i in reversed(range(l)):
    21             if min(rightmax, leftMostHigh[i]) > height[i]:
    22                 sum = sum + min(rightmax, leftMostHigh[i]) - height[i]
    23             if height[i] > rightmax:
    24                 rightmax = height[i]
    25 
    26         return sum
    27 
    28 
    29 height = [0,1,0,2,1,0,1,3,2,1,2,1]
    30 s = Solution()
    31 print(s.trap(height))
  • 相关阅读:
    基本输入输出函数
    变长参数表函数的编写
    一文精通Linux 命令行
    Linux 下的种种打包、压缩、解压命令
    GIT补丁怎么打?
    GIT 合并的冲突解决途径
    GIT 库整理方法
    GIT中常用命令详解1.reset
    霍夫曼编码及译码
    C语言链表实现队列
  • 原文地址:https://www.cnblogs.com/loadofleaf/p/5042960.html
Copyright © 2011-2022 走看看