剑指Offer——连续子数组的最大和(JS实现)
原创
©著作权归作者所有:来自51CTO博客作者wb59770b05237ae的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
解题思路
- 本题的思想在于想到动态规划
- 首先定义一个和nums同纬度的数组
- dp数组的第一个元素和nums的第一个元素的值相同
- 这里的dp[i]的含义是解题关键:代表着当前元素在内的所有前面的子数组的和的最大值
- 从nums的第二个元素开始遍历,如果dp[i-1]>0,dp[i]则等于dp[i-1]+nums[i],反之则等于nums[i]
解题代码
var maxSubArray = function (nums) {
// 本题核心是:动态规划的思想
// dp[i]:代表着第i个元素之前的所有子数组的和的最大值
// 当dp[i-1] 大于0的时候,加上i此时的值,才是包含第i个元素的所有子数组的最大值
let dp = new Array(nums.length);
dp[0] = nums[0];
for (let i = 1; i < nums.length; i++) {
dp[i] = dp[i-1] > 0 ? dp[i-1] + nums[i] : nums[i];
}
dp.sort((num1,num2) => num2 - num1);
return dp[0];
};
总结
- 本题关键在于想到动态规划的思想
- 截止到当前元素之前的所有子数组的最大和为dp[i-1]和nums[i]的关系