分治策略 获取最大子数组
暴力求解:双重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))
生命的意义不在于寻找,而在于创造。