1.
1 package test1; 2 3 4 5 import java.util.Scanner; 6 7 public class FindMaxArry{public static int max(int ans, int i) { 8 // TODO Auto-generated method stub 9 10 int m; 11 if(ans>i) 12 m=ans; 13 else 14 m=i; 15 return m; 16 } 17 18 public static void main(String[] args) { 19 20 int[] a = new int[100]; 21 int i,n; 22 System.out.println("请输入数组元素个数"); 23 Scanner sc = new Scanner(System.in); 24 n=sc.nextInt(); 25 System.out.println("请输入数组元素"); 26 for(i=1;i<=n;i++) 27 a[i] = sc.nextInt(); 28 29 for(i=2;i<=n;i++) { 30 if(a[i]+a[i-1]>a[i]) 31 a[i] = a[i]+a[i-1]; 32 } 33 34 int ans=-10000; 35 for(i=1;i<=n;i++) 36 ans=max(ans,a[i]); 37 System.out.println(ans); 38 } 39 40 41 }
运行截图:
2.环形数组,不要求时间复杂度,但是每个元素只能用一次。但是下面的这个方法有写小瑕疵,不能满足每个元素只能用一次的要求,目前还不知道怎么解决。
1 package day01; 2 3 import java.util.Scanner; 4 5 public class FindMaxArray { 6 7 public static void main(String[] args) { 8 // TODO 自动生成的方法存根 9 int length;//定义数组长度length 10 int n;//定义变化后的数组的长度 11 System.out.println("请输入数组元素个数"); 12 Scanner sc = new Scanner(System.in); 13 length=sc.nextInt(); 14 n=2*length; 15 16 int[] a = new int[n]; 17 System.out.println("请输入数组中的元素:"); 18 19 for(int i=0;i<length;i++) 20 { 21 a[i] = sc.nextInt(); 22 } 23 int max=a[0]; 24 int sum=0;//定义求和后的元素 25 for(int i=0;i<length;i++) 26 { 27 sum=0; 28 for(int j=i;j<length+i;j++) 29 { 30 sum=sum+a[j]; 31 if(sum>max) 32 { 33 max=sum; 34 } 35 } 36 a[length+i]=a[i]; //每次将已经计算过的数放到最后 37 } 38 System.out.println("最大子数组的和为:"+max); 39 sc.close(); 40 41 42 } 43 44 }
运行结果截图: