[动态规划]Leetcode53.最大子序和
如果读者对于动态规划思路解法还不是很了解,可以先点击链接查阅我之前的一篇博文《算法之【动态规划】详解》,很详细的介绍了动态规划求解思路及方法,有利于你更好的学习动态规划。
题目描述
给定一个整数数组
nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例1
输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
DP定义及状态方程
定义dp[i]
表示以i
索引为结尾的最大连续子序列的和,因此递推方程为dp[i] = max(nums[i], dp[i-1] + nums[i])
,因为如何nums[i]为负值时,dp[i]的最大值应该为dp[i-1]
此题目的最终答案即为dp
数组中的最大值:max(dp)
初始边界条件
#初始化边界条件
dp[0] = nums[0]
最终代码
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
if len(nums) == 0:
return 0
if len(nums) == 1:
return nums[0]
n = len(nums)
dp = [float('-inf')] * n
dp[0] = nums[0]
for j in range(1, n):
dp[j] = max(nums[j],dp[j-1] + nums[j])
return max(dp)
如果喜欢作者,欢迎点赞、收藏及关注,谢谢!
欢迎扫描下面二维码关注公众号:阿旭算法与机器学习, 和作者共同学习交流。