标签:
设计思想
用户设定数组长度及其数值,定义sum的初值为0,max初值为数组第一个数,所求子数组的初始位置为0,进行一次遍历,sum依次与数组的数叠加,若和为正数,则证明目前的子数组之和为最大。若和为负数,则记此位置为startIndex,即记录下一个位置的数,当sum大于max时,给max赋值,记此位置为endIndex,如此进行一次循环即可。
出现的问题
用户输入数组数值可能会越界
可能的解决方案(多选)
判断用户输入数的个数,错误时重新输入。
源代码
import java.util.Scanner; public class Submax { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); System.out.println("please input the number of the array date"); int a=in.nextInt(); int []date=new int[a]; System.out.println("input the number (Int):"); for(int i=0;i<a;i++) //用户输入数字 { date[i]=in.nextInt(); } int sum=0,max=date[0]; int startIndex=0,endIndex=0; for(int i=0;i<a;i++) //进行一次遍历 { if(sum>=0) { sum+=date[i]; //和为正数时一直相加 } else { sum=date[i]; startIndex=i; //和为负数时记录下一个数 } if(sum>max) { max=sum; endIndex=i; //求最大值 } } System.out.println("the max subarray is:"); for(int i=startIndex;i<=endIndex;i++) { System.out.println(date[i]+" ");//输出子数组 } System.out.println("the max is:"+max); } }
结果截图
总结
许多看起来很难的程序也会有简单的解决之道,需勤动手动脑。
标签:
原文地址:http://www.cnblogs.com/love528/p/5368991.html