1. 程式人生 > >簡單認為是求牆之間水的容量

簡單認為是求牆之間水的容量

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