java - 如何返回 Kadane 算法中的最大子数组?

标签 java algorithm kadanes-algorithm

public class Kadane {
  double maxSubarray(double[] a) {
    double max_so_far = 0;
    double max_ending_here = 0;

    for(int i = 0; i < a.length; i++) {
      max_ending_here = Math.max(0, max_ending_here + a[i]);
      max_so_far = Math.max(max_so_far, max_ending_here);
    }
    return max_so_far;
  }
}

上述代码返回最大子数组的和。

我该如何返回具有最大总和的子数组?

最佳答案

像这样:

public class Kadane {
  double[] maxSubarray(double[] a) {
    double max_so_far = 0;
    double max_ending_here = 0;
    int max_start_index = 0;
    int startIndex = 0;
    int max_end_index = -1;

    for(int i = 0; i < a.length; i++) {
      if(0 > max_ending_here +a[i]) {
        startIndex = i+1;
        max_ending_here = 0;
      }
      else {
        max_ending_here += a[i];
      }

      if(max_ending_here > max_so_far) {
        max_so_far = max_ending_here;
        max_start_index = startIndex;
        max_end_index = i;
      }
    }

    if(max_start_index <= max_end_index) {
      return Arrays.copyOfRange(a, max_start_index, max_end_index+1);
    }

    return null;
  }
}

关于java - 如何返回 Kadane 算法中的最大子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7778186/

相关文章:

algorithm - 用于查找缺少字母的单词的良好算法和数据结构?

python - 在Python中禁止执行compute_resilience函数

java - 给定一个项目列表(不同类型),我如何将它们分开,以便每个组只包含相同类型的项目

arrays - 卡丹的扭曲

prolog - 最大子数组(Kadane 算法)- 尾递归

java - 是否有一种设计模式支持注入(inject)多个抽象类实现并有条件地使用注入(inject)的bean之一

java - TomEE Intellij 理念 : Remote deploy

java - 使用 powershell 在 jar 文件中添加文本文件

java - java中的线程间通信

arrays - 求解 MaxDouble Slice Kadane 的算法变体