资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
给出一个长为n的数列,a1,a2,……,an,求和最大的连续子序列,即找到一对(i,j),i<=j,使ai+ai+1+……+aj的和最大,输出这个和
输入格式
第一行为正整数n
第二行n个用空格分开的整数
表示a1,a2,……,an
输出格式
一个整数,表示最大连续子序列的和
样例输入
3
-1 -2 -3
样例输出
-1
数据规模和约定
1<=n<=10^5,-10^5<=ai<=10^5
# 开发人:HGC
# 开发时间:2021-11-16 20:50
n=int(input())
nums=list(map(int,input().split()))
'''
使用动态规划数组
dp=[0]*n#表示以以第i个数结尾的序列中的最大子序列和,其中每个子序列均以最后一个数结尾
dp[0]=nums[0]
for i in range(1,n):
dp[i]=max(dp[i-1]+nums[i],nums[i])
print(max(dp))
'''
#一样的思路,但是可以不使用动态规划数组
maxsum,cur=0,0
for i in range(n):
cur+=nums[i]
if cur>maxsum:
maxsum=cur
elif cur<0:
cur=0
print(maxsum)