test_case = [1,4,3,-3,2,-5,-4,3,2,-8,4,5,-1]
在本文就使用上边的那个测试用例
下面是第一个方法,递推前缀和,时间复杂度o(n^2),思想很简单 把数组的从0到i的和求出来存到sums【i】,sum[i]计算的是test_case从0到i的和(不包括第i位),因此找出sums[i] - sums[j]最大就可以了.
def max_sum_1(test_case):
index_list = []
max_sum = 0
sums = [0 for i in range(len(test_case)+1)]
for i in range(1,len(test_case)+1):
sums[i] = sums[i-1]+test_case[i-1] #sum[i]计算的是test_case从0到i的和(不包括第i位),因此找出sums[i] - sums[j]最大就可以了
for i in range(len(test_case)+1):
for j in range(i,len(test_case)+1):
local_sum = sums[j]-sums[i]
if local_sum >max_sum:
max_sum = local_sum
index_list.append((i,j-1,local_sum))
if max_sum == 0:
print("None")
else:
index_list = list(filter(lambda x:x[-1]==max_sum,index_list))
print("the max_sum is