java - java中如何找到序列和最大的子数组?

标签 java

如果数组是{-1 3 -1 9 4 -4}。我希望输出为

“总和为 15,数组为 {3 -1 9 4}。”

我有求和的代码,但是如何获取这个子数组?

这是求和的代码

    int maxSum = 0, thisSum = 0;
    for( int j = 0; j < a.length; j++ ){
        thisSum += a[ j ];
        if( thisSum > maxSum ){
            maxSum = thisSum; 
        }
        else if( thisSum < 0 )
            thisSum = 0;
    }
    System.out.println( maxSum );

最佳答案

只要记住,当 from 和 to 为 0 并且 sum 为零时,这可能意味着您有一个空子数组(假设所有子数组都是负数)。

    int []a = {-1, 3, -1, 9, 4, -4};

    int from=0, to=0;

    int maxSum = 0, thisSum = 0, thisFrom = 0 ;
    for( int j = 0; j < a.length; j++ ){

      if (thisSum == 0){ thisFrom = j ; }

        thisSum += a[ j ];
        if( thisSum > maxSum ){
            from = thisFrom;
            to = j;
            maxSum = thisSum; 
        }
        else if( thisSum < 0 )
            thisSum = 0;
    }
    System.out.println(Arrays.toString(Arrays.copyOfRange(a, from, to+1)));
    System.out.println( maxSum );

关于java - java中如何找到序列和最大的子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39582864/

相关文章:

Java新手(linux,Terminal)级别是1.5

Java:Swing PropertyChangeSupport

Java Apache-POI XWPF 如何复制或输出位图?

java - 如何使用 HTTP 响应代码检查外部 URL 内容是否正确加载到 JSP 页面中的 <IFRAME>

java - 使类的所有实例共享一个值 - Audioclips

java - 在尝试创建 JFileChooser——公共(public)变量?

java - 排序时间间隔

java - Android MainActivity.java 错误(适用于平板电脑,但不适用于手机)

java - 使用Lombok库,但如何自定义/重写setter方法

java - 简单: efficiency of ' if '