博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【python/Hard/42】Trapping Rain Water
阅读量:2171 次
发布时间:2019-05-01

本文共 869 字,大约阅读时间需要 2 分钟。

题目

这里写图片描述

实现思路

模拟法。

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

时间复杂度为O(N)。

实现代码

class Solution:    def trap(self, height):        """        :type height: List[int]        :rtype: int        """        length = len(height)        leftMaxArr = [0 for i in range(length)]        leftMax = 0        for i in range(length):            if height[i] > leftMax:                leftMax = height[i]            leftMaxArr[i] = leftMax        water = 0        rightMax = 0        for i in range(length-1,-1,-1):            if height[i] >rightMax:                rightMax = height[i]            if min(rightMax,leftMaxArr[i]) > height[i]:                water += min(rightMax,leftMaxArr[i]) - height[i]        return water
你可能感兴趣的文章
A星算法详解(个人认为最详细,最通俗易懂的一个版本)
查看>>
利用栈实现DFS
查看>>
逆序对的数量(递归+归并思想)
查看>>
数的范围(二分查找上下界)
查看>>
算法导论阅读顺序
查看>>
Windows程序设计:直线绘制
查看>>
linux之CentOS下文件解压方式
查看>>
Django字段的创建并连接MYSQL
查看>>
div标签布局的使用
查看>>
HTML中表格的使用
查看>>
(模板 重要)Tarjan算法解决LCA问题(PAT 1151 LCA in a Binary Tree)
查看>>
(PAT 1154) Vertex Coloring (图的广度优先遍历)
查看>>
(PAT 1115) Counting Nodes in a BST (二叉查找树-统计指定层元素个数)
查看>>
(PAT 1143) Lowest Common Ancestor (二叉查找树的LCA)
查看>>
(PAT 1061) Dating (字符串处理)
查看>>
(PAT 1118) Birds in Forest (并查集)
查看>>
数据结构 拓扑排序
查看>>
(PAT 1040) Longest Symmetric String (DP-最长回文子串)
查看>>
(PAT 1145) Hashing - Average Search Time (哈希表冲突处理)
查看>>
(1129) Recommendation System 排序
查看>>