簡單認為是求牆之間水的容量
阿新 • • 發佈:2019-01-11
早上在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
|