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]


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃了海兔的内脏怎么办 吃了鱿鱼的吸盘怎么办 想开个烧烤店没学过怎么办 墨鱼汁弄衣服上怎么办 干鱿鱼泡开发黄怎么办 吃了芥末胃疼怎么办 手撕鱿鱼咸了怎么办 孕妇吃了点芥末怎么办 葡萄酒上面有一层白霉怎么办 手机一不小心把视频删了怎么办 柑橘7月份果实小怎么办 鹦鹉鱼身上有小白点怎么办 鹦鹉鱼身上烂了怎么办 红鹦鹉鱼变黑了怎么办 唱美声总夹嗓子怎么办 发财树树干出褶怎么办 月季花夏天换盆出现黄叶怎么办 刚种的月季枯了怎么办 新买的月季黄叶了怎么办 月季花叶孑轰发黄怎么办? 新种的月季苗弱怎么办? 月季换盆后浇透水叶子黄了怎么办 肉肉移栽后浇透水怎么办 月季花扦插的没长根发芽了怎么办 君子兰发的小苗怎么办 蔷薇光长枝条不开花怎么办 牡丹发芽又干了怎么办 擦皮炎平后皮肤变黑怎么办 误喝发霉的咖啡渣怎么办 狗吃了速溶咖啡怎么办 咖啡机放豆的地方进水怎么办 干吃咖啡粉上瘾怎么办 去良友花艺住宿怎么办 充气娃娃放了气怎么办 煮杜鹃根没有锅怎么办 淘宝店卖鲜花被买家拒收货怎么办 执业医师电子注册忘记密码怎么办 怀孕吃了油炸的怎么办 百合长得太高怎么办 百合的杆没了怎么办 百合花长得太细怎么办