java中的kadane算法

ahe*_*ang 9 java algorithm dynamic-programming kadanes-algorithm

我在Java中有以下Kadane算法的实现.它基本上是找到连续子阵列的最大总和.

String[] numbers = string.split(",");
                int max_so_far = 0;
                int max_ending_here = 0;
                for (int i = 0; i < numbers.length-1;i++){
                     max_ending_here = max_ending_here + Integer.parseInt(numbers[i]);
                     if (max_ending_here < 0)
                         max_ending_here = 0;
                     if (max_so_far < max_ending_here)
                          max_so_far = max_ending_here;
                }
                System.out.println(max_so_far);
Run Code Online (Sandbox Code Playgroud)

但是,如果数组中存在负数和正数的组合,则此操作无效,例如:

2,3,-2,-1,10
Run Code Online (Sandbox Code Playgroud)

哪个应该返回12作为最大值.截至目前,它返回5

rsp*_*rsp 12

您的算法实现看起来没问题,但您的循环条件i < numbers.length-1不会:它只停止数组末尾的1.i < numbers.length应该这样做:-)

  • 这就是每个循环如此之大的原因.你避免这样的陷阱. (8认同)