【问题标题】:Implementation of Kadane's Algorithm is not working for one particular arrayKadane 算法的实现不适用于特定阵列
【发布时间】:2021-12-04 10:37:24
【问题描述】:

下面是sn-p的代码:看到子数组的最大和是 6 但是它被计算为 7。
所以 Kadane 的算法在这里失败了?!

public class KadaneAlgo {

    public static void main(String[] args) {
        int maxSUm = maxSumSubArray(new int []{2,2,2,-2,-2,3,2});
        System.out.println(maxSUm); // prints 7
    }
    
    static int maxSumSubArray(int [] a){
        int size = a.length;
        int max_so_far = Integer.MIN_VALUE, max_ending_here = 0;

        for (int i = 0; i < size; i++)
        {
            max_ending_here = max_ending_here + a[i];
            if (max_so_far < max_ending_here)
                max_so_far = max_ending_here;
            if (max_ending_here < 0)
                max_ending_here = 0;
        }
        return max_so_far;
    }
}

【问题讨论】:

    标签: java arrays algorithm kadanes-algorithm


    【解决方案1】:

    根据wiki,正确答案是7,所以代码是正确的。

    为什么?因为子数组还包括数组的最小和最大边界:

    A[0..n] -> 找到边界为 i,j 的子数组,其中 0

    【讨论】:

      【解决方案2】:

      代码没有错,正确答案是所有数字加起来的7。

      【讨论】:

      • 这是完全相同的程序...你认为翻转 if 的确切作用是什么?
      • 我试过你的解决方案它不起作用
      • @Fermi-4 我只是按照维基百科中的实现
      猜你喜欢
      • 1970-01-01
      • 2017-11-18
      • 2011-11-06
      • 2012-02-20
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多