最大子数组求解
最大子数组求解 一开始是想到了一个比较笨的方法,就是所有的子数组全部求出来 让后再将最大的子数组求解出来 但是这个时间复杂度就比较大不符合老师的时间复杂度是
f(n)的要求,于是我观察了题目 ,如果全是正数的话那他的最大子数组肯定是它本身 ,但是数组里边有正数和负数,所以可能会出现想加到某一位他的和变成负数这样就是最大的子数组,当相加到前几位之和小于零的话就要重新,数组子和就要归零,重新在那那一位上相加即可。这样的和就就是求出的最大子数组。
运行结果截图:
我用了 几分钟加了一个随机生成数组的方法 这样数组就是随机产生的
import org.junit.Test; public class shuzu1 { @Test public void fun(){ int[] b = new int[5]; shengchengs(5,b); for(int i=0;i<5;i++){ System.out.print(b[i]+" "); } System.out.println("最大子数组为:"+zuishuzhu(b)); } public int zuishuzhu(int []a){ int temp=0; int Max=0; int length=a.length; for(int i=0;i<length;i++){ temp+=a[i]; if(temp>Max){ Max=temp; } if(temp<0){ temp=a[i]; } } return Max; } public void shengchengs(int a,int[]b){ Random rand=new Random(); for(int i=0;i<a;i++){ b[i]=rand.nextInt()%100; int c=rand.nextInt()%2; if(c==0){ b[i]=-b[i]; } } } }