最大子段和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30



def (s, ends, starts=0):
b = [s[starts]]
max = s[starts]
start = starts
end = ends
j = starts + 1
for i in range(1, ends-starts+1):
if s[j] > b[i-1]+s[j]:
start = j
b.append(s[j])
elif s[j] < b[i-1]+s[j]:
b.append(b[i-1]+s[j])
if max < b[i]:
max = b[i]
end = j
j += 1
if max < 0:
start = end = -1
max = 0
return "起始位置:",start, " 结束位置:",end, " 最大子段和:",max


if __name__ == '__main__':
list = list(map(int, input("输入数组,输出最大子段和:").strip().split()))
starts = int(input("输入开始位置:"))
ends = int(input("输入结束位置:"))
print(max_sum(list, ends, starts))