You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求数组连续子数组最大和的JavaScript代码调试求助

修正连续子数组最大和的JavaScript实现

你的代码核心问题在于初始化maxSum为0,当输入数组全为负数时,所有可能的连续子数组和都是负数,而0会被错误地当作最大和返回,这就是全负测试用例失败的原因。

修正后的代码

function maxSubarraySum(arr) {
  // 处理空数组边界场景(可根据需求调整返回值)
  if (arr.length === 0) return 0;

  let maxSum = arr[0];
  let currentSum = arr[0];

  for (let i = 1; i < arr.length; i++) {
    // 决定是否将当前元素加入前序子数组,或重新开启新子数组
    currentSum = Math.max(arr[i], currentSum + arr[i]);
    // 更新全局最大和
    maxSum = Math.max(maxSum, currentSum);
  }

  return maxSum;
}

关键逻辑说明

  1. 初始化调整:将maxSum和currentSum初始化为数组第一个元素,直接规避全负场景下0的干扰。
  2. 子数组选择逻辑:遍历过程中,currentSum取「当前元素本身」和「当前元素+前序子数组和」的较大值——如果前序子数组和为负,就舍弃它,从当前元素重新开始计算子数组和。
  3. 全局最大值更新:每次迭代都比较并更新maxSum,确保始终记录遍历过程中出现的最大子数组和。

测试验证

  • 原测试用例:maxSubarraySum([1, -2, 3, 10, -4, 7, 2, -5]) → 输出18,符合预期
  • 全负测试用例:maxSubarraySum([-1, -2, -3, -4, -5]) → 输出-1,符合预期
  • 单元素负数:maxSubarraySum([-5]) → 输出-5,正确
  • 混合场景:maxSubarraySum([-2, 1, -3, 4, -1, 2, 1, -5, 4]) → 输出6(对应子数组[4, -1, 2, 1]),正确

内容的提问来源于stack exchange,提问作者user18847228

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 04:50:08