PAT1 1007 Maximum Subsequence Sum

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LSC_333/article/details/91368464

题目链接
我的github

题目大意

给一串数字,求其最大子串和

输入

每组包含一个测试用例
第一行给出数字串的长度 K 10000 K\leq10000
第二行给出 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)

猜你喜欢

转载自blog.csdn.net/LSC_333/article/details/91368464