直接粘贴代码吧,有点解释,应该能看明白,不明白留言即可。
package dynamicplan;
public class DynamicPlan {
public static void getMaxsubArray(int[] a){
int sum = 0, tem = 0;
int start = 0, starttem = 0;
int lengt = 0, lengttem = 0;
//遍历
for (int i = 0; i < a.length; i++) {
//如果累计的总和小于0,则需要重新开始累计
if (tem<0) {
tem = a[i];
lengttem=1;
//起始位置
starttem=i;
}
//继续累计总和
else {
tem+=a[i];
lengttem++;
}
//如果总和的最大值更新了,则更新此时的值。
if (tem>sum) {
sum=tem;
start = starttem;
lengt = lengttem;
}
}
System.out.println("最大的子数组和是:"+sum);
System.out.println("开始的下标是"+start);
System.out.println("长度是"+lengt);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={-2,11,-4,13,-5,-2};
getMaxsubArray(a);
}
}