|
|
发表于 2017-12-2 22:25:10
|
显示全部楼层
本帖最后由 蓝色王魂 于 2017-12-2 22:41 编辑
两种优化方式,方法都是是积水后的面积减原来的面积,如果都大于一个较大的数,比如说都大于10000,第一种方法效率就会很低,或者如果对与list(set(list_of_number)),相邻的值都差个2,3之类的,第一个方法效率也会变低,但如果数字是从0到最大值基本上每个都有取到的话,第一种方法会稍快。- def max_rainwater2(list_of_number):
- max_value = max(list_of_number)
- sum_all = sum(list_of_number)
- length = len(list_of_number)
- sum_watered = 0
- for i in range(1,max_value+1):
- for j in range(length):
- if list_of_number[j] >= i:
- start = j
- break
- for j in range(length-1,-1,-1):
- if list_of_number[j] >= i:
- end = j
- break
- sum_watered += end - start + 1
- return (sum_watered-sum_all)
- def max_rainwater3(list_of_number):
- sum_all = sum(list_of_number)
- sum_watered = 0
- value_list = list(set(list_of_number))
- length = len(list_of_number)
- shuiwei = 0
- for each in value_list:
- for i in range(length):
- if list_of_number[i] >= each:
- start = i
- break
- for i in range(length-1,-1,-1):
- if list_of_number[i] >= each:
- end = i
- break
- sum_watered += (each-shuiwei) * (end - start + 1)
- shuiwei = each
- return (sum_watered-sum_all)
复制代码 |
|