题目:
给你一个整数数组
nums
,请你找出一个具有最大和的连续子数组,返回其最大和示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:
输入:nums = [1] 输出:1示例 3:
输入:nums = [5,4,-1,7,8] 输出:23
动规解法:
dp[i] 代表含义: 以 nums[i] 结尾的最大连续子数组和
得到 dp[i] 的两种情况:
① dp[i] 前面的元素大于 0, 则 dp[i] = dp[i-1] + num[i]
比如: [-5, 2, 1] 则 dp[i] = dp[2] = dp[1] + nums[2] = 2 + 1 = 3
② dp[i] 前面的元素小于 0, 则 dp[i] = num[i]
比如: [-5, 2] 则 dp[i] = dp[1] = nums[1] = 2所以 dp[i] = Math.max(dp[i-1] + nums[i], nums[i])
var maxSubArray = function (nums) {
const dp = []
dp[0] = nums[0]
let res = nums[0]
for (let i = 0; i < nums.length; i++) {
if (dp[i - 1] > 0) {
dp[i] = dp[i - 1] + nums[i]
} else {
dp[i] = nums[i]
}
res = Math.max(dp[i], res)
}
return res
};