第十一天:力扣第53题,最大子序和
地址:leetcode-cn.com/problems/ma…
思路:刚开始很傻,想用暴力破解,结果超时:
var maxSubArray = function(nums) {
let a = nums[0];
var c = 0;
for(let i = 0;i<nums.length;i++)
{
for(let j = i ;j<nums.length;j++ )
{
for(let k = i;k<=j;k++)
{
c = c + nums[k];
}
if(c>a)
{
a = c ;
}
c=0;
}
}
return a;
};
后来想想,可以从动态规划入手:
用 f(i) 代表以第i个数结尾的「连续子数组的最大和」
用c表示f(i-1)与f(i)之间的关系处理。
var maxSubArray = function(nums) {
let a = nums[0];
var c = 0;
for(let i = 0;i<nums.length;i++)
{
c = Math.max(c+nums[i],nums[i]);
a = Math.max(a,c);
}
return a;
};
我也不知道如何去解释,可以带入实例来运算看看,不知道怎么表达了,c是来累计的,但是又要获取较大的项,然后与a比较,若是c大,则赋值给a,若是c小,则继续累计。
执行用时:76 ms, 在所有 JavaScript 提交中击败了97.41%的用户
内存消耗:39.3 MB, 在所有 JavaScript 提交中击败了12.93%的用户