简单思路:dp[i] = Math.max(nums[i], dp[i-1] + nums[i]),动态规划的思路,当前最大子序和是比较上一次最大子序加上当前数字与当前数字谁大谁小,大的就是当前最大子序和。我们也会记录全局的最大自序和,就是最后的结果了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function (nums) {
let result = nums[0];
let dp = 0;
for (let index = 0; index < nums.length; index++) {
const cur = nums[index];
dp = Math.max(cur, dp + cur);
result = Math.max(dp, result);
}
return result;
};
console.log(maxSubArray([-2, 1, -3, 4, -1, 2, 1, -5, 4]));