最大子数组问题-递归法 @ Python

来源:互联网 发布:h5商城系统源码下载 编辑:程序博客网 时间:2024/05/22 06:21
# -*- coding: utf-8 -*-'''@target: 求解一个最大子数组@author: dawang@date: 2017.9.9'''def maxSubArray(l):    length = len(l)    if 1 == length: # 递归终止条件        return l    mid = length // 2    l_max = maxSubArray(l[:mid])    r_max = maxSubArray(l[mid:])    l_c_max = float("-inf") # 由于数据存在负数, 不能使用0    r_c_max = float("-inf")    temp = 0    # 记录横跨数组的最大值    l_index = 0    # for index, item in enumerate(l[mid - 1::-1]):    #     temp += item    #     if temp > l_c_max:    #         l_c_max = temp    #         l_index = index    i = mid - 1    while i >= 0:        temp += l[i]        if temp > l_c_max:            l_c_max = temp            l_index = i        i -= 1    r_index = 0    temp = 0    for index, item in enumerate(l[mid:]):        temp += item        if temp > r_c_max:            r_c_max = temp            r_index = index + mid    c_max = l[l_index:mid]+ l[mid:r_index + 1]    if sum(l_max) > sum(r_max) and sum(l_max) >sum(c_max):        return l_max    if sum(r_max) > sum(l_max) and sum(r_max) >sum(c_max):        return r_max    if sum(c_max) > sum(r_max) and sum(c_max) >sum(l_max):        return c_maxA = [13, -3, -25, 20, -3, -16, -23, 18, 20, -7, 12, -5, -22, 15, -4, 7]print maxSubArray(A)
原创粉丝点击