Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Kadane算法实现返回不正确的结果_Java_Algorithm_Kadanes Algorithm - Fatal编程技术网

Java Kadane算法实现返回不正确的结果

Java Kadane算法实现返回不正确的结果,java,algorithm,kadanes-algorithm,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.print

我已经编写了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。代码中有什么基本的东西我遗漏了吗

我读过其他的实现,它们也很有意义,只是我不明白为什么它没有返回正确的答案


提前谢谢

你没有考虑到你可能已经找到了你想要的金额。因此,您需要:

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

为什么要将sum作为参数传递?为什么要进行两次递归调用?我真的说不出你期望这是怎么回事。这和Kadane的算法不太像你正试图为直接的Kadane算法创建更复杂的解决方案,但我仍然建议你使用一些较小的输入,比如数组中的2-3个元素,然后干运行你的代码,生成一个递归树,你为什么要递归地这样做?一个普通的实现是O(n),那么为什么要用递归调用使它复杂化呢?@WJS:我只是在练习我的技能,知道其他的实现,但只是在提高技能。这是一个很好的理由。更多的人也应该这样做。