1.题目描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
2.解题思路
本题采用动态规划求解。 for循环的每一步寻找当前的最大子序和,分两种情况:
- 与前面合并
- 不与前面合并
两种情况中找到最大值,继续循环,不断更新。 方程式为dp[i] = max(dp[i-1] + nums[i], nums[i]);
3.代码实现
/**
* @param {number[]} nums
* @return {number}
*/
function max(a,b) {
if (a > b) {
return a;
} else {
return b;
}
}
var maxSubArray = function(nums) {
const dp = [];
for (let j = 0; j < nums.length; j++) {
dp.push(0);
}
dp[0] = nums[0]; // 初始值
result = nums[0];
for(let i = 1; i < nums.length; i++) {
dp[i] = max(dp[i-1] + nums[i], nums[i]); // 方程式
result = max(result,dp[i]); // 存储最大值
}
return result;
};