01最大子列和问题进阶版
依据在线处理方法,进行改进,输出时,不仅输出最大子列和,并且输出对应数组的起点和终点下标。
分别对应maxsum, m, n
import java.util.Scanner;
public class demo01MSS
{
public static void main(String[] args)
{
/**
最大子列和问题实现
通过键盘录入数据,nextLine函数返回输入回车之前的所有字符
输出最大和的数值,及其对应数组的下标
*/
Scanner scan = new Scanner(System.in);
System.out.print("请输入数据个数:");
String k = scan.nextLine();
System.out.print("数据个数为:"+k);
System.out.print("请输入一个数组:");
String str = scan.nextLine();
String[] arr = str.split(" ");
int num[] = new int[arr.length];
for(int i = 0; i<num.length; i++){
num[i] = Integer.parseInt(arr[i]);
}
int maxsum=0;
int thissum=0;
int m=0, n=(num.length-1); //数组起始下标
for(int i=0; i<num.length; i++){
thissum = thissum+num[i];
if(thissum>maxsum){
maxsum = thissum;
n=i; //当最大值开始变化时,记住此时的下标
}else if(thissum<0){
thissum=0;
m = i+1; //当this重新初始化时,下一个起始点就是i+1
}
}
System.out.println("最大子列和为:"+maxsum+", 下标为"+m+" "+n);
scan.close();
}
}