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))
  • 相关阅读:
    vue-cli + webpack 构建vue.js开发环境
    JDK、Eclipse、Myeclipse、Tomcat等各种软件的版本详解(写给对版本和兼容性问题焦头烂额的你)
    总结下var、let 和 const 的区别
    vue双向绑定原理
    Vue中computed和watch的区别
    前端面试题总结
    微信开发之上传素材
    微信开发之向用户群发文本消息
    微信开发之获取用户详细列表
    TPshop入门大纲
  • 原文地址:https://www.cnblogs.com/loadofleaf/p/5042960.html
Copyright © 2011-2022 走看看