java第二周作业

本来我的想法,是把所有可能都加起来,然后进行循环

比如设数字为1,-1,2,-4,3,4,5,-7

从第一位开始加到第二位,在加到第三位,以此类推,

从第二位加第三位,再加到第四位,以此类推

直到最后,然后进行比较,得出最大的子数组的和,但是再求时间复杂度上就感觉不好弄了,也不知道怎么弄了

public static void main(String[] args)
 2     {
 3         int LONG=20;//数量
 4         int FANWEI=10;
 5         Scanner input=new Scanner(System.in);
 6         int [] num=new int[LONG];
 7         int []kuai=new int[LONG];
 8         for(int k=0;k<LONG;k++)
 9         {
10             num[k]=(int)(1+Math.random()*FANWEI*2)-FANWEI;
11             System.out.println(num[k]);
12         }
13         System.out.println("/////////////////////////////////////////");
14         //int [] num= {1,-1,2,-4,3,4,5,-7};
15         int i=0,t=0;
16         int sum=0,max=0,aMax=num[0];
17         //从第一个开始加直到最大,中途记录
18         for(i=0;i<num.length;i++)//起始
19         {
20             t=0;
21             max=num[t];//赋初值
22             for(sum=num[t+i];t<num.length-i-1;t++)//
23             {
24                 if(max<=sum)//比较,记录最大
25                 {
26                     max=sum;
27                     
28                 }
29                 //System.out.println(sum);
30                 sum=sum+num[t+1+i];
31                 
32                 
33                 
34             }
35             if(aMax<=max)
36             {
37                 aMax=max;
38             }
39         
40         
41             //System.out.println("");
42             System.out.println(max);
43             
44         }
45 
46         
47         System.out.println("END"+aMax);
48         
49 
50     }
原文地址:https://www.cnblogs.com/love-nan/p/10529267.html