你必须暴力破解它。
编辑:algorithms 比我的蛮力解决方案更快。 (感谢@user2357112
)
构造所有子列表并检查总和最大的。要构建从start=0 和end=start+1 开始的所有子列表,然后增加end 直到结果是整个列表,重复该步骤增加start 等:
a = [-2, 1, -3, 4, -1, 2, 1, -5, 4]
max = sum(a)
l = a[:]
for start in range(len(a)):
for end in range(start, len(a)):
s = sum(a[start:end+1])
if s > max:
max = s
l = a[start:end+1]
print(max, l)
结果:
6 [4, -1, 2, 1]
您检查的列表是(按此顺序):
[-2]
[-2, 1]
[-2, 1, -3]
[-2, 1, -3, 4]
[-2, 1, -3, 4, -1]
[-2, 1, -3, 4, -1, 2]
[-2, 1, -3, 4, -1, 2, 1]
[-2, 1, -3, 4, -1, 2, 1, -5]
[-2, 1, -3, 4, -1, 2, 1, -5, 4]
[1]
[1, -3]
[1, -3, 4]
[1, -3, 4, -1]
[1, -3, 4, -1, 2]
[1, -3, 4, -1, 2, 1]
[1, -3, 4, -1, 2, 1, -5]
[1, -3, 4, -1, 2, 1, -5, 4]
[-3]
[-3, 4]
[-3, 4, -1]
[-3, 4, -1, 2]
[-3, 4, -1, 2, 1]
[-3, 4, -1, 2, 1, -5]
[-3, 4, -1, 2, 1, -5, 4]
[4]
[4, -1]
[4, -1, 2]
[4, -1, 2, 1]
[4, -1, 2, 1, -5]
[4, -1, 2, 1, -5, 4]
[-1]
[-1, 2]
[-1, 2, 1]
[-1, 2, 1, -5]
[-1, 2, 1, -5, 4]
[2]
[2, 1]
[2, 1, -5]
[2, 1, -5, 4]
[1]
[1, -5]
[1, -5, 4]
[-5]
[-5, 4]
[4]