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

来源:互联网 发布:手机编写c语言 编辑:程序博客网 时间:2024/05/21 04:18

早上在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
    whilep_r > p_l :
        ifmax_l < max_r:
            p_l= p_l + 1
            iftestcase[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
            iftestcase[p_r] >=max_r:
                max_r= testcase[p_r]
            else:
                volume= volume + (max_r -testcase[p_r])
                pass
            pass
        pass
    pass
 
    returnvolume

用了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
原创粉丝点击