给一个int数组,求最大子列和。
可以for循环一次求出结果。需要两个变量存储数据。一是sum,二是max。当sum加上下一个数>=0时,sum+=sum,否者sum=这个数。
当sum>max,将max=sum。这样max就是最大子列和。而sum是每次大于0的试探。
package math;
//在线最大子列和
//一个数组中有13个数,这13个数大小是不确定的,求最大子列和
public class SubList {
static int[] list = {1,-1,2,32,4,-22,4,-555,23,44,23,-3,2};
public SubList(){
}
public static int maxSubList() {
//先将sum 赋值为list中的第一个
//不能赋值为零 因为如果list中全是负数就错了
int sum = list[0];
//max为最大子列和
int max = list[0];
for(int i=1;i<13;i++) {
if(sum+list[i]>=0) {
sum+=list[i];
System.out.println(list[i]);
}else {
sum=list[i];
}
if(sum>=max) {
max=sum;
}
}
System.out.println(max);
return max;
}
}
测试
package math;
public class MathTest {
public static void main(String[] args) {
SubList.maxSubList();
}
}