如果数组是{-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 );
答案 0 :(得分:1)
只记得当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 );
答案 1 :(得分:0)
如果您有总和,则意味着在您的代码中的某个时刻,您的代码知道它对该点的最大价值。为什么不为每个和保存字符串中的序列,并在每次有最大总和时用下一个序列替换字符串,最后你将得到其值和值已经在你的maxSum变量中的序列。