本来我的想法,是把所有可能都加起来,然后进行循环
比如设数字为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 }