python求解LeetCode问题之trapping rain water
来源:互联网 发布:淘宝iphone官换机 编辑:程序博客网 时间:2024/05/29 23:46
问题:
给定一系列的直方图的高度,代表墙的高度,用这些墙来收集雨水,计算能够收集的雨水的最大容量
思路:
分析问题,先看一张清晰的图片,图片来源于网上,如下:
上图中,蓝色区域的面积即为雨水的最大容积,这个图片很有代表性,我们自己来看的话可能很快就计算出来了最大的容积是多少,但是要想给计算机一个计算的规则的话就要观察一下有什么特征规律了:
如果第一个数值为0,即高度为0的话肯定是不能够收集到雨水的,如果直方图数量少于等于2的话那么也是不可能收集到雨水的直接返回0即可
蓝色区域的计算可以划分为单个计算单位来计算,在单位容积上计算的方法为:该坐标的左右高度最小值与它自身的高度之差
有了这个思路就好办多了,接下来就是如何求解该坐标的左右高度最小值与它自身的高度之差了,这里采用一种简单直观的方法就是:
1.从左往右遍历数值求得每个数值左坐标最大值
2.从后往前遍历数值求得每个数值右坐标的最大值
3.同时遍历两个数组,得到该坐标的左右高度最小值与它自身的高度之差,累加求和
下面是简单的实现:
#!usr/bin/env python#encoding:utf-8'''__Author__:沂水寒城功能:收集雨水,使得收集雨水最多'''def collect_rain_water(height_list): ''' ''' length=len(height_list) if length<=2: return 0 else: right_list=[0]*length tmpr=height_list[-1] for i in range(len(height_list)-2,-1,-1): right_list[i]=tmpr tmpr=max(height_list[i],tmpr) print 'right_list is:', right_list left_list=[0]*length tmpl=height_list[0] for i in range(1,length-1): tmpl=max(tmpl, height_list[i]) left_list[i]=tmpl print 'left_list is:', left_list count=0 for i in range(length): tmp=min(left_list[i],right_list[i])-height_list[i] count+=tmp if tmp>0 else 0 return countif __name__ == '__main__': height_list=[[0,1,0,2,1,0,1,3,2,1,2,1],[0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 0,0,4]] for one_list in height_list: print collect_rain_water(one_list)
结果如下:
right_list is: [3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 1, 0]left_list is: [0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0]6right_list is: [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0]left_list is: [0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 0]15[Finished in 0.2s]
阅读全文
0 0
- python求解LeetCode问题之trapping rain water
- 【Leetcode】【python】Trapping Rain Water
- leetcode之Trapping Rain Water
- leetcode之Trapping Rain Water
- LeetCode之Trapping Rain Water
- Leetcode之Trapping Rain Water
- 【Leetcode】之Trapping Rain Water
- 【LeetCode with Python】 Trapping Rain Water
- LeetCode: Trapping Rain Water
- LeetCode : Trapping Rain Water
- [LeetCode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [LeetCode]Trapping Rain Water
- LeetCode-Trapping Rain Water
- [leetcode] Trapping Rain Water
- [LeetCode] Trapping rain water
- Leetcode: Trapping Rain Water
- 9的余数-OJ
- poj2385
- jQuery ajax 如何将文件与所有的表单数据上传到 ASP.NET服务器
- 51nod 1640 天气晴朗的魔法
- qt在vs2013中打不开.*ui文件
- python求解LeetCode问题之trapping rain water
- XMind揭秘:汽车的世界
- rsync: failed to set times on "/www.cookie.com/." (in cookie.com): Permission denied
- Android Studio中如何解决重复依赖导致的app:transformClassesWithJarMergingForDebug
- Eclipse自动生成作者、日期注释等功能设置
- ACM新人入门指导
- MongoDB 常用命令与经验
- SQL语句之DDL和DML
- 棋盘