简单认为是求墙之间水的容量

早上在csdn链接上看到的问题:


“看下面这个图片”

“在这个图片里我们有不同高度的墙。这个图片由一个整数数组所代表,数组中每个数是墙的高度。上边的图可以表示为数组[2,5,1,2,3,4,7,7,6]”

“假如开始下雨了,那么墙之间的水坑能够装多少水呢?”

“以1×1的方块为单位计算容积。所以,在上边的图中下标为1以左的都会漏掉。下标7以右的也会漏掉。剩下的只有在1和6之间的一坑水,容积是10”


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
def calculate(testcase):
     p_l = 0
     p_r = len (testcase) - 1
     max_l = testcase[p_l]
     max_r = testcase[p_r]
 
     volume = 0
     while p_r > p_l :
         if max_l < max_r:
             p_l = p_l + 1
             if testcase[p_l] > = max_l:
                 max_l = testcase[p_l]
             else :
                 volume = volume + (max_l - testcase[p_l])
                 pass
             pass
         else :
             p_r = p_r - 1
             if testcase[p_r] > = max_r:
                 max_r = testcase[p_r]
             else :
                 volume = volume + (max_r - testcase[p_r])
                 pass
             pass
         pass
     pass
 
     return volume

用了3个不同的测试用例,其中两个是文中给出的:

1
2
3
4
5
6
testcase_1 = [ 2 , 5 , 1 , 2 , 3 , 4 , 7 , 7 , 6 ]
testcase_2 = [ 2 , 5 , 1 , 3 , 1 , 2 , 1 , 7 , 7 , 6 ]
testcase_3 = [ 6 , 1 , 4 , 6 , 7 , 5 , 1 , 6 , 4 ]
print "case %s total volume : %s " % (testcase_1, calculate(testcase_1))
print "case %s total volume : %s " % (testcase_2, calculate(testcase_2))
print "case %s total volume : %s " % (testcase_3, calculate(testcase_3))

输出如下:

1
2
3
4
D:\PyWorkspace\pool>pool.py
case [2, 5, 1, 2, 3, 4, 7, 7, 6] total volume : 10
case [2, 5, 1, 3, 1, 2, 1, 7, 7, 6] total volume : 17
case [6, 1, 4, 6, 7, 5, 1, 6, 4] total volume : 13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值