package 实验三;
public class 最大子段和 {
public static void main(String[] args) {
C c=new C();
c.run();
c.show();
}
}
class C{
int [] a= {-2,11,-4,13,-5,-2}; //数据
int n=a.length;
int sum=0; //最大子段和
int b=0;
int i=0;
int besti=0; //最大子段和的开始位置
int bestj=0; //最大子段和的结束位置
void run() {
sum=MaxSum(n,a);
}
int MaxSum(int n, int a[]) {
for (int j=0; j<n; j++) {
if (b>0)
b+= a[j];
else {
b=a[j];i=j;
}
if (b > sum) {
sum=b; besti=i; bestj=j;
}
}
return sum;
}
void show() {
System.out.print("数组a为:");
for(i=0;i<n;i++) {
System.out.print(a[i]+" ");
}
System.out.println();
System.out.println("最大子段和为:"+sum);
System.out.println("最大子段和的开始位置为:"+a[besti]);
System.out.println("最大子段和的结束位置为:"+a[bestj]);
}
}
- 最大子段和
给定由n个整数(可能有负整数)组成的序列(a1,a2,…,an),最大子段和问题要求该序列形如的最大值(1<=i<=j<=n),当序列中所有整数均为负整数时,其最大子段和为0。