求数组最大子数组的和

  当拿到这个问题时,实在是发愁至极,因为我不是很懂这个题目的意思是什么。认真拆分后,大概思路是,找到每个子数组,然后将每个子数组的和求出来,再取他们之间的最大值。

  先把想到的需要定义的变量定义出来,首先定义原始数组,用来存放最开始的数组原型。还需要定义一个存放子数组和的数组,用来最后的取最大值。中间变量我们定义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 }

  

原文地址:https://www.cnblogs.com/Aduorisk/p/10613422.html