|
发表于 2017-11-29 22:21:48
|
显示全部楼层
本帖最后由 gunjang 于 2017-11-29 22:38 编辑
@jerryxjr1220 好吧,稍微优化下,好像就没有超过0.01s的。。。
- import random,time
- def max_area0(list_of_number): #calculte (len-1)^2/2
- r = 0
- for i in range(len(list_of_number)-1):
- for j in range(i+1, len(list_of_number)):
- t = min(list_of_number[i], list_of_number[j]) * (j-i)
- if t > r: r = t
- return r
- def max_area(list_of_number):
- r = 0
- for i in range(0, len(list_of_number)-1):
- minstep = r//list_of_number[i] + 1
- j = len(list_of_number) - 1
- while j >= i+minstep:
- t = min(list_of_number[i], list_of_number[j]) * (j-i)
- if t > r:
- r = t
- minstep = r//list_of_number[i] + 1
- j -= 1
- return r
- print(max_area([1,8,6,2,5,4,8,3,7])) #49
- num5000 = [random.randint(1, 1000) for i in range(5000)]
- st = time.time()
- print('new maxarea:', max_area(num5000), time.time()-st)
- st = time.time()
- print('maxarea 0:', max_area0(num5000), time.time()-st)
复制代码
|
|