例如数组
{1,5,-6,4,9,-2}
最大累加和为 13
如果前n项和累加和小于0 我们可以直接丢弃
继续从n+1项开始继续累加
本题将为大家讲解任何打印数组的最大累加和
我们先定义一个类 在类中定义print(int[]num)方法
传递一个数组 返回数组的最大累加和
package CSDN;
public class T2打印子数组最大累加和 {
private static int print(int[]num) {
// TODO Auto-generated method stub
//假设数组下标0时 为最大
int max = num[0];
return max;
}
}
这里我们定义一个 maxind 用于记录每次累加数字后的值
同时判断当累加到i项时maxind是否小于零
如果maxind小于零 对前i项进行丢弃
我们要重新给maxind赋值num[i+1]
package CSDN;
public class T2打印子数组最大累加和 {
private static int print(int[]num) {
// TODO Auto-generated method stub
//假设数组下标0时 为最大
int max = num[0];
int maxind = max;
int i =1;
while(i<num.length) {
if(maxind>=0) {
maxind += num[i];
}else {
maxind = num[i];
}
++i;
}
return max;
}
}
判断完maxind是否小于0之后
我们对max和maxind进行判断,如果max>maxind 则最大值不需要更换 继续累加
如果max<maxind则最大值需要更换。继续累加
package CSDN;
public class T2打印子数组最大累加和 {
private static int print(int[]num) {
// TODO Auto-generated method stub
//假设数组下标0时 为最大
int max = num[0];
int maxind = max;
int i =1;
while(i<num.length) {
if(maxind>=0) {
maxind += num[i];
}else {
maxind = num[i];
}
if(max<maxind) {
max = maxind;
}
i++;
}
return max;
}
}
最后我们定义一个main()方法调用一下print()方法
package CSDN;
public class T2打印子数组最大累加和 {
public static void main(String[] args) {
int [] num = {1,5,-6,4,9,-2};
for (int s = 0; s < num.length; s++) {
System.out.print(num[s]+" ");
}
System.out.println();
System.out.println(print(num));
}
private static int print(int[]num) {
// TODO Auto-generated method stub
//假设数组下标0时 为最大
int max = num[0];
int maxind = max;
int i =1;
while(i<num.length) {
if(maxind>=0) {
maxind += num[i];
}else {
maxind = num[i];
}
if(max<maxind) {
max = maxind;
}
++i;
}
return max;
}
}
最后我们打印数组:
1 5 -6 4 9 -2
13
最大累加和为:13
我们对数组进行更改测试不同案例:
-2 1 -5
1
-2 -1 -5
-1