一开始做这个题(返回一个整数数组中最大子数组的和)一点思路都没有,后来是靠老师的提醒,以及一些同学的讲解,才知道了再不考虑时间复杂度的情况下应该怎么做,很遗憾,自己还没有想到别的办法,从网上找了一个,我得学学,然后后期再补充新的总结体会。
这是我自己写的代码,还没有实现题目要求,时间复杂度不为O(n).
package array; import java.util.Scanner; public class array1 { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner sc=new Scanner(System.in); System.out.println("请输入数组的长度"); int n=sc.nextInt(); int array[]=new int[n]; int array2[]=new int[n]; System.out.println("请依次输入数组的每个值"); for(int i=0;i<n;i++) { array[i]=sc.nextInt(); } for(int i=0;i<n;i++) { array2[i]=0; } int max; for(int i=0;i<n;i++) { max=array[i]; int sum=0; System.out.println("abc"+max); for(int j=i;j<n;j++) { sum=sum+array[j]; if(max<sum) { max=sum; } } array2[i]=max; System.out.println("def"+max); } int k=array2[0]; for(int i=0;i<n;i++) { System.out.println("ghi"+array2[i]); } for(int i=0;i<n;i++) { if(array2[i]>k) { k=array2[i]; } } System.out.println("最大值"+k); } }
这是我从网上找的一个符合要求的
public class array { public static void main(String[] args){ int number,maxsum,maxstart; int i; Scanner in = new Scanner(System.in); System.out.println("请输入数组的大小:"); number=in.nextInt(); int array[]=new int[number]; System.out.println("请输入数组的值:"); for(i=0;i<number;i++) { array[i]=in.nextInt(); } maxsum=array[0]; maxstart=array[0]; for(i=1;i<number;i++) { if(maxstart<0) { maxstart=0; } maxstart+=array[i]; if(maxstart>maxsum) maxsum=maxstart; } System.out.println(maxsum); in.close(); } }