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

子数组最大连续和

http://www.nowcoder.com/practice/1718131e719746e9a56fb29c40cc8f95

根据题意,求解连续数组的最大值,利用动态规划的思想,则可创建动态数组,然后赋值初始值,再根据状态转移方程进行遍历;本题中求解的是连续数组的最大值,设 dp[i] 表示数组 data[:i] 的最大值, 其值与 dp[i - 1] 和 当前值 data[i] 有关, 若 dp[i - 1] + data[i] > data[i] 则 dp[i] 由 dp[i - 1] + data[i] 转移得到, 如果 dp[i - 1] + dp[i] <= data[i] 则 dp[i] 与当前值有关; 初始值 dp[0] = data[0];代码如下:

n = int(input().strip())
data = list(map(int, input().strip().split()))
dp = [float('-inf') for _ in range(n)]
dp[0] = data[0]
for i in range(1, n):
    if dp[i - 1] + data[i] > data[i]:
        dp[i] = dp[i - 1] +data[i]
    else:
        dp[i] = data[i]
print(max(dp))

由于 dp[i] 的值只和当前值和 dp[i - 1] 有关,可用变量代替dp, 最终取整个数组的最大连续子数组的值,再用变量存储最大值,代码如下

n = int(input().strip())
data = list(map(int, input().strip().split()))
m, r = data[0], data[0]
for d in data[1:]:
    m = max(m + d, d)
    r = max(m, r)
print(r)

全部评论
dp[i] 表示数组 data[:i] 的最大值,dp最大值18是dp[6],data【:6]和不等于18啊?
点赞 回复 分享
发布于 2022-04-06 14:25

相关推荐

06-25 16:25
梧州学院 Java
愿汐_:项目介绍那么长,然而你做了啥就一句话?
点赞 评论 收藏
分享
晗江雪:其实我只是觉得你们导员说的很好笑
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 18:05
哈哈哈哈哈感觉朋友找工作的已经疯掉了,直接上图
码农索隆:真老板娘:“我嘞个去,这不我当年的套路吗
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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