动态规划(DP)解最大连续子序列
Posted FE Tips
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划(DP)解最大连续子序列相关的知识,希望对你有一定的参考价值。
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
// 伪代码
// 外层循环是当前子序列开始的标记
for i (0 ~ arr.length)
//每次开始求一个新的子数组 当前求和归零
sum = 0
// 内层循环是当前子序列结束的标记
for j (0 ~ arr.length)
// 循环过程中进行子序列求和累加
sum += arr[j]
// 同时记录当前的最大值max
max = Math.max(sum, max)
// 最终返回max即可
return max
以数组第二个元素作为结尾的子序列最大值是1
[-2, 1] sum = -1
[1] sum = 1
以数组第三个元素作为结尾的子序列最大值是-2
[-2, 1, -3] sum = -4
[1, -3] sum = -2
[-3] sum = -3
以数组第四个元素作为结尾的子序列最大值是4
[-2, 1, -3, 4] sum = 0
[1, -3, 4] sum = 2
[-3, 4] sum = 1
[4] sum = 4
/**
* @param {number[]} nums
* @return {number}
*/
let maxSubArray = function(nums) {
// 默认当前的最大和为第一个元素
let sum = nums[0]
// dp代表以当前元素结尾的最大和,默认也是第一个元素
let dp = nums[0]
// 从数组的第二个元素开始循环
for(let i = 1; i < nums.length; i++){
// 上文中提到的dp公式
dp = Math.max(dp + nums[i], nums[i])
// 同时进行当前最大值的记录
sum = Math.max(sum, dp)
}
return sum
};
以上是关于动态规划(DP)解最大连续子序列的主要内容,如果未能解决你的问题,请参考以下文章