看到题目的相关标签为动态规划,就开始想如何状态转移,一开始想的是。
先得到nums[0]的最大子数组和,nums[0]也是base case dp[0]=nums[0];
。。。状态转移也太好想
看了dong哥的思路,dp[i]表示
dp[i]表示以num[i]为结尾的 最大子数组和 为dp[i]
这种定义之下,想得到整个 nums
数组的「最大子数组和」,不能直接返回 dp[n-1]
,而需要遍历整个 dp
数组。
状态转移方程 dp[i]=max(nums[i],num[i]+dp[i-1])
举个例子[-2,1,-3,4,-1,2,1,-5,4]
dp[0]=nums[0]
dp[1]=max(1,1+dp[0])=1,dp[1]表示以nums[1]为结尾的最大子数组和,这个子数组是nums[1],即nums[0],和nums[1]已经是两个子数组
0],和nums[1]已经是两个子数组
dp[2]=-2,dp[3]=4,dp[4]=3,dp[5]=5,dp[6]=6,dp[7]=1,dp[8]=5