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

连续子数组最大和

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

思路1:动态规划

1. 确定dp数组代表的含义

    dp[i]:以下标 i 结尾的连续子数组的最大和
2. 确定递推公式
    以 i 结尾的连续子数组的最大和为 以 i-1 结尾的连续子数组的最大和加上当前第 i 个元素 和 当前元素本身 中的最大值
    故递推公式为:dp[i] = max(dp[i-1] + nums[i], nums[i])
3. 初始化
    输入有正有负,所以可以将dp数组初始化为无穷小或者数组中的最小值
    由递推公式可得所有状态都由上一状态推导而来,故需要初始化dp[0], 即dp[0] = nums[0]

代码:

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

dp = [float('-inf')] * n
dp[0] = nums[0]
for i in range(1, n):
    dp[i] = max(nums[i], dp[i-1] + nums[i])
    
print(max(dp))

思路2:暴力解法(会超时)

代码:

n = input()
nums = list(map(int, input().split()))
tmp = float('-inf')
for i in range(len(nums)):
    for j in range(i+1, len(nums)+1):
        tmp = max(tmp, sum(nums[i:j]))
        
print(tmp)



全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务