# 利用分治算法,连续子列表的最大和可能有三种情况,左列表的最大和,右列表,中间列表
def solution(arr):
if len(arr) == 1:
return arr[0]
split_index = len(arr)//2
arr_1, arr_2 = arr[0:split_index],arr[split_index:]
left_max = solution(arr_1)
right_max = solution(arr_2)
max_l = 0
max_r = 0
temp_l = 0
temp_r = 0
for i in range(split_index-1,-1,-1):
temp_l+=arr[i]
max_l = max(max_l,temp_l)
for j in range(split_index,len(arr),1):
temp_r+=arr[j]
max_r = max(max_r,temp_r)
return max(left_max,right_max,max_l+max_r)
if __name__ == '__main__':
arr = [-2,1,-3,4,-1,2,1,-5,4]
res = solution(arr)
print(res)
<<< 6
分治算法——连续子列表的最大和
最新推荐文章于 2021-09-25 11:50:29 发布