早上在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 |