0

下面是代码片段:看到子数组的最大和是 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;
    }
}
4

2 回答 2

2

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

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

A[0..n] -> 找到边界为 i,j 的子数组,其中 0<=i<=j<=n; 在你的情况下 i=0 和 j=6 (整个数组)

于 2021-10-16T17:56:10.553 回答
1

代码没有任何问题,正确答案是所有数字加在一起得到的 7。

于 2021-10-16T17:38:13.303 回答