浙大数据结构-作业

第一章:基本概念

最大子列和问题

n=int(input())
lst=list(map(int,input().split()))

maxSum=0
thisSum=0
for i in range(n):
  thisSum+=lst[i]
  if thisSum<0:
    thisSum=0
  if thisSum>maxSum:
    maxSum=thisSum
    
print (maxSum)

最大子列和问题(二)

输出最大子列和,同时要输出对应的子列第一个和最后一个数。
最大和小于0时,输出起始位和末位数。

n = int(input())
A = list(map(int, input().split()))

left = [0] * n  # f[i]为A[0]:A[i]的最长子列和对应的起始下标
f = [e for e in A] # f[i]为A[0]:A[i]的最长子列和
maxSum = A[0] 
maxLeft = 0
maxRight = n - 1

for i in range(1, n):
    if f[i - 1] >= 0:
        f[i] = f[i - 1] + A[i]
        left[i] = left[i - 1]
    else:
        left[i] = i

    if f[i] > maxSum:
        maxLeft = left[i]
        maxRight = i
        maxSum=f[i]

if maxSum < 0:
    print("{} {} {}".format(0, A[0], A[n - 1]))
else:
    print("{} {} {}".format(maxSum, A[maxLeft], A[maxRight]))

猜你喜欢

转载自blog.csdn.net/XindiOntheWay/article/details/82996797