js -最大连续子数组问题

最大连续子数组的和

const getMaxSubSum = (arr) => {
  let maxSum = 0;
  let partialSum = 0;
  for (let item of arr) {
    partialSum += item;
    maxSum = Math.max(partialSum, maxSum);
	console.log('partialSum', partialSum)
	console.log('maxSum', maxSum)
    if (partialSum < 0) partialSum = 0;
  }
  return maxSum;
};
console.log('let arr  = [100, -9, 2, -3, 5]', getMaxSubSum(arr));

  1. getMaxSubSum([-1, 2, 3, -9]) == 5
  • 0 + (-1) = -1 => Math.max(-1, 0) => maxSum = 0, partialSum => 0
  • 0 + 2 = 2 => Math.max(2, 0) => maxSum = 2, partialSum => 2
  • 2 + 3 = 5 => Math.max(5, 2) => maxSum = 5, partialSum => 2
  • 2 + (-9) = -7 => Math.max(-7, 5) => maxSum = 5, partialSum => 0
  1. getMaxSubSum([2, -1, 2, 3, -9]) == 6
  2. getMaxSubSum([-1, 2, 3, -9, 11]) == 11
  3. getMaxSubSum([-2, -1, 1, 2]) == 3
  4. getMaxSubSum([100, -9, 2, -3, 5]) == 100
  5. getMaxSubSum([1, 2, 3]) == 6

这个方法,maxSum只算最大值,而partialSum 每次遇到小的会重新置0,重新计算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值