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

Kadane算法实现对特定数组计算结果错误问题排查求助

你的Kadane算法实现没有问题,输出7是正确结果,你对最大子数组和的预期判断有误。

计算验证

测试数组[2,2,2,-2,-2,3,2]的所有连续子数组中,总和最大的是整个数组本身,求和计算如下:
2 + 2 + 2 + (-2) + (-2) + 3 + 2 = 7

你预期的6是前3个正元素的和,确实是不含负数的子数组最大值,但不符合常规连续子数组的定义——连续子数组允许包含负数,只要整体总和更大即可。

实现逻辑校验

你写的是标准Kadane算法实现,逻辑完全符合算法要求:

  • max_ending_here 记录以当前元素结尾的连续子数组的最大和
  • 每次迭代先累加当前元素,再更新全局最大值max_so_far
  • 若max_ending_here小于0则重置为0,代表放弃当前负收益的前缀,从下一个元素重新开始累计

这个版本仅有一种边界特性:当输入数组全为负数时,会返回数组中最大的单个负数,符合「子数组至少包含1个元素」的通用要求,逻辑无错。

如果你确实需要不含负数的子数组最大和

如果你的业务要求子数组不能包含负元素,只需要在原有逻辑上加一个判断,遇到负数就重置max_ending_here即可:

static int maxSumSubArrayNoNegative(int [] a){
    int size = a.length;
    int max_so_far = 0, max_ending_here = 0;
    for (int i = 0; i < size; i++)
    {
        if (a[i] < 0) {
            max_ending_here = 0;
            continue;
        }
        max_ending_here = max_ending_here + a[i];
        if (max_so_far < max_ending_here)
            max_so_far = max_ending_here;
    }
    return max_so_far;
}

该版本运行你的测试数组会返回你预期的6。


内容的提问来源于stack exchange,提问作者Khan Mohammed ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:36:03