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