动态规划:最大子序和

144 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

题目描述

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/ma… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路分析

最大子序和是一道经典的动态规划题,当然看到题目的第一眼并不能马上判断出这是动态规划题(至少我看不出)。这其实没有什么关系,在我看来,算法的本质是一种思维方式,它的意义可能更在于教我们怎么思考。刚看到这题没有思路,也不知道是动态规划,没关系,从示例分析,思考答案是怎么得出的。 以示例为例:(写的比较快,如果有问题,还望阅者指出) 在这里插入图片描述 ![在这里插入图片描述](img-blog.csdnimg.cn/20201217000…](p3-juejin.byteimg.com/tos-cn-i-k3…) oZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1NoaUppZURlWWluWXU=,size_16,color_FFFFFF,t_70) 在这里插入图片描述 在这里插入图片描述

代码实现

nums = input().split()

length = len(nums)

nums[0] = int(nums[0])

for i in range(1, length):
    subMaxSum = max(int(nums[i]) + int(nums[i-1]), int(nums[i]))
    nums[i] = subMaxSum

print(max(nums))