分治策略 获取最大子数组
暴力求解:双重for循环
递归求解:子数组有三种情况 左边 中间 右边
#!/usr/bin/env python3
import random
a = [random.randrange(1000,9999) for i in range(20)]
print(a)
def basic_test(a):
max_value = a[1]-a[0]
input_day = 0
out_day = 1
for i in range(len(a)-1):
for j in range(i,len(a)):
if(a[j]-a[i]>max_value):
input_day = i
out_day = j
max_value = a[j]-a[i]
return input_day,out_day,max_value
def test(a):
length = len(a)
if length==2:
return 0,1,a[1]-a[0]
if length<2:
return False
mid = length//2
left_a = a[:mid]
left_res = test(left_a)
right_a = a[mid+1:]
right_res = test(right_a)
start = mid
end = mid + 1
max_start = mid
max_end = mid+1
#右边最大值
while end<=length-1:
if a[max_end] < a[end]:
max_end = end
end += 1
#获取左边最小值
while start>=0:
if a[start] < a[max_start]:
max_start = start
start -= 1
max_list = [max_start,max_end,a[max_end] - a[max_start]]
if left_res and left_res[2]>max_list[2]:
max_list = left_res
if right_res and right_res[2]>max_list[2]:
max_list = right_res
return max_list
val = basic_test(a)
print(val)
print(test(a))
生命的意义不在于寻找,而在于创造。

浙公网安备 33010602011771号