前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Leetcode][python]Trapping Rain Water/接雨水

[Leetcode][python]Trapping Rain Water/接雨水

作者头像
蛮三刀酱
发布2019-03-26 16:27:20
6550
发布2019-03-26 16:27:20
举报
文章被收录于专栏:蛮三刀的后端开发专栏

题目大意

给定数组A,A[i]表示第i个位置的高度,求可以盛放雨水的容量。

输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6

解题思路

纯思路

网上有多种思路,不尽相同但是思路类似,这里贴一个供参考。

参考:http://www.cnblogs.com/zuoyuan/p/3781453.html

开辟一个数组leftmosthigh,leftmosthigh[i]为A[i]之前的最高的bar值,然后从后面开始遍历,用rightmax来记录从后向前遍历遇到的最大bar值,那么min(leftmosthigh[i], rightmax)-A[i]就是在第i个bar可以储存的水量。例如当i=9时,此时leftmosthigh[9]=3,而rightmax=2,则储水量为2-1=1,依次类推即可。这种方法还是很巧妙的。时间复杂度为O(N)。

https://blog.csdn.net/sunnyyoona/article/details/18557669 代码略

代码

纯思路

代码语言:javascript
复制
class Solution(object):
    def trap(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        left_temp_max = [0 for i in range(len(height))]  # 每个位置的左边最高值
        left_max = 0
        right_max = 0
        for i in range(len(height)):
            if height[i] > left_max: 
                left_max = height[i]
            left_temp_max[i] = left_max

        total = 0
        for i in range(len(height)-1, -1, -1):
            if height[i] > right_max: 
                right_max = height[i]
            if min(right_max, left_temp_max[i]) > height[i]:  # 主要判断
                total += min(right_max, left_temp_max[i]) - height[i]
        return total

总结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年09月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目大意
  • 解题思路
    • 纯思路
      • 代码
        • 纯思路
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档