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

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

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 广东

相关推荐

我的offer呢😡:这不才9月吗,26到明年毕业前能一直找啊,能拿下提前批,转正的,offer打牌的都是有两把刷子的,为什么非要跟他们比。如果别人是9本硕+金牌+好几段大厂实习呢?如果别人是双非通天代呢?如果别人是速通哥呢?,做好自己就行了,我们做不到他们一样提前杀死比赛,但晚点到终点也没啥关系吧
双非应该如何逆袭?
点赞 评论 收藏
分享
评论
4
2
分享

创作者周榜

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