一:设计思想
先定义一个与原数组长度相同的空数组,然后将原数组的第一个数赋值给空数组的第一个位置,然后用循环比较原数组的数字与空数组的前一个数字相加是否为负数,得到第二个数组后进行比较就可以得到整数数组中最大子数组的和并且时间复杂度为O(n)。
二:源代码
//返回一个整数数组中最大子数组的和。 //信1405-1班 20142966 黄伟鹏 import java.util.Scanner; public class shuzu { public static void main(String[] args) { // TODO 自动生成的方法存根 int i,length; System.out.println("请输入要进行比较的数字个数:"); Scanner in=new Scanner(System.in); //定义数组长度 length=in.nextInt(); int list[]=new int[length]; System.out.println("请输入要进行比较的数字:"); Scanner t=new Scanner(System.in); //定义数组的内容 for(i=0;i<length;i++) { list[i]=t.nextInt(); } //定义一个空的存储数组 int size[]=new int[length]; //将数组中的数字相加,求最大值 size[0]=list[0]; for(i=1;i<length;i++) { if(size[i-1]<0) { size[i]=list[i]; } else { size[i]=list[i]+size[i-1]; } } //求出最大值 for(i=0;i<length-1;i++) { if(size[0]<size[i+1]) { size[0]=size[i+1]; } } //输出最大值 System.out.println(size[0]); } }
三:程序结果截图