Kadane算法实现返回错误结果

时间:2019-12-30 20:51:05

标签: java algorithm kadanes-algorithm

我已经编写了Kadane的算法,但是不知何故返回了错误的结果。不知道为什么。这是实现。基本上是在数组中找到具有最大和的ubarray

public class Kadane {

    public static void main(String[] args) {
        int[] arr =  {-2, -5, 6, -2, -3, 1, 5, -6};
        Kadane k = new Kadane();
        System.out.println(k.calculate(arr, 0, 0));
    }

    public int calculate(int[] arr, int pointer, int sum) {
        if(pointer >= arr.length )
            return sum;

        return Math.max(calculate(arr, pointer+1, sum+arr[pointer]), calculate(arr, pointer+1, 0));
    }
}

我想它应该以某种方式返回7的最大和。在计算中,我看到正在计算7,但返回1。代码中是否缺少任何基本内容?

我已经阅读了其他实现,并且它们也很有意义,只是不明白为什么它没有返回正确的答案。

谢谢!

1 个答案:

答案 0 :(得分:2)

您不考虑可能已经找到所需金额的事实。因此,您需要:

return Math.max(sum, Math.max(calculate(arr, pointer+1, sum+arr[pointer]), calculate(arr, pointer+1, 0)));