题解 | #环形数组的连续子数组最大和#

环形数组的连续子数组最大和

http://www.nowcoder.com/practice/53a9f1ba687440cc9c641c2b042a59d7

将环转换为普通数组思考:

  1. 当目标是越过了末尾的环中子串,找到普通数组中和为负的最小子串,用和减去
  2. 找普通和最大的子串
  3. 两者比较取更大
  4. 特殊情况:
  • 全负or全0:输出最大数
  • 全正,直接取和
n=eval(input())
a=list(map(int,input().split()))
dp1=[0]*n # 最小
dp2=[0]*n # 最大
dp1[0]=dp2[0]=a[0]
for i in range(1,n):
    dp1[i]=min(dp1[i-1]+a[i],a[i])
    dp2[i]=max(dp2[i-1]+a[i],a[i])
    
temp1=min(dp1)
if temp1<0: #非全正
    temp1=sum(a)-temp1

temp2=max(dp2)
if temp2<=0: #全负or全0
    print(temp2)
else:
    print(max(max(dp2),temp1))
全部评论
讲的很清楚,但是我还是不太理解@_@!
点赞 回复 分享
发布于 2023-07-06 16:17 广东

相关推荐

08-27 12:02
已编辑
南京外国语学校 网络安全
再来一遍:实则劝各位不要all in华子,不要相信华为hr
点赞 评论 收藏
分享
码农顶针:估计让你免费辅导老板孩子的学习
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务