求数组最大子数组的和
当拿到这个问题时,实在是发愁至极,因为我不是很懂这个题目的意思是什么。认真拆分后,大概思路是,找到每个子数组,然后将每个子数组的和求出来,再取他们之间的最大值。
先把想到的需要定义的变量定义出来,首先定义原始数组,用来存放最开始的数组原型。还需要定义一个存放子数组和的数组,用来最后的取最大值。中间变量我们定义i,j两个变量就足够了,因为算法复杂度是n方。在子数组录入时需要一个计数变量,定义count。在求子数组和的时候需要一个变量sum,第一次想到的就是这些,后面需要用到变量时再往上面加。
用两个for循环来嵌套实现,第一个循环比较容易理解,从原始数组下标开始遍历。最主要的是第二次循环,每一次都需要将sum的新值作为子数组的和存入数组中。
每一个子数组的和都求出来以后,自然求最大值就很容易了。
1 package zuoye3; 2 3 import java.util.Scanner; 4 5 public class xunhuan { 6 7 public static void main(String[] args) { 8 // TODO 自动生成的方法存根 9 int i,j; 10 int sum=0; 11 int count=1;//子数组下标单位 12 int max; 13 Scanner scan=new Scanner(System.in); 14 System.out.print("输入数组的长度: "); 15 i=scan.nextInt(); 16 int length=i*(i+1)/2;//表示子数组的个数 17 int []a=new int[i];//定义长度为id的原始数组 18 int []b=new int[length];//定义长度为length的子数组,用来存放各个子数组的和 19 System.out.println("请依次输入数组元素"); 20 for(i=0;i<a.length;i++) 21 { 22 a[i]=scan.nextInt(); 23 }//输入数组元素 24 System.out.println("当前数组为: "); 25 for(i=0;i<a.length;i++) 26 { 27 System.out.print(a[i]+" "); 28 }// 29 System.out.println(" "); 30 //下面代码表示求各子数组大小的过程 31 for(i=0;i<a.length;i++) 32 { 33 sum=0; 34 for(j=i;j<a.length;j++) 35 { 36 sum+=a[j]; 37 System.out.println("第"+count+"个子数组的和为"+sum); 38 b[count-1]=sum; 39 count++; 40 } 41 } 42 max=b[0]; 43 for(i=0;i<b.length;i++) 44 { 45 if(max<b[i]) 46 max=b[i]; 47 } 48 49 System.out.println("最大子数组的和为 :"+max); 50 } 51 52 }