题目大意
给一串数字,求其最大子串和
输入
每组包含一个测试用例
第一行给出数字串的长度
K
≤
10000
K\leq10000
K≤10000
第二行给出
K
K
K个数表示所给数字串
输出
在一行中输出最大子串和,然后输出最大子串的最左边的值和最右边的值,如果有多个就输出左下标最小的那一个
样例输入
10
-10 1 2 3 4 -5 -23 3 7 -21
样例输出
10 1 4
解析
遍历数组,每次将数字相加,如果和大于已知最大和,就更新最大和、右下标,如果和为负就更新左下标
k = int(input())
num = list(map(int, input().split()))
sum, ts, left, right, tl = -1, 0, 0, k - 1, 0
for i in range(k):
ts += num[i]
if ts > sum:
sum = ts
left = tl
right = i
if ts < 0:
ts = 0
tl = i + 1
sum=max(sum, 0)
print('%d %d %d' % (sum, num[left], num[right]))
exit(0)