一、设计思路
由于题目要求时间复杂度为O(n),即不能有多次循环出现,所以在考虑上就要将问题简化。其实问题的主要考虑在数组中的负数元素,当前i个元素相加结果小于0,那么就不让其再参与后面的结合。所以先定义两个数组arr[]arr1[],第一个便是用户输入的数组,后一个则是用来储存子数组的和,一边判断,一边进行比较,找到最大值max。
二、代码
1 //信1405-1班20142973魏垚 2 //最大子数组的和 3 4 import java.util.Scanner; 5 public class Max_Array { 6 7 public static void main(String[] args) { 8 // TODO Auto-generated method stub 9 10 Scanner in=new Scanner(System.in); 11 12 System.out.print("请输入数组长度:"); 13 int l=in.nextInt();//用户输入数组长度 14 15 int arr[]=new int[l];//定义数组 16 int arr1[]=new int[l];//储存子数组和 17 18 System.out.print("请依次输入数组中各元素:"); 19 for(int i=0;i<l;i++) 20 { 21 arr[i]=in.nextInt();//用户输入数组各个值 22 } 23 24 //找出最大子数组 25 arr1[0]=arr[0]; 26 int max=arr[0]; 27 for(int i=1;i<l;i++) 28 { 29 if(arr1[i-1]>=0)//当前i个元素之和大于0就接着往后加 30 arr1[i]=arr[i]+arr1[i-1]; 31 if(arr1[i-1]<0)//当前i个元素之和小于0就不加,直接把下一个元素的值直接取下来 32 arr1[i]=arr[i]; 33 //找到最大值 34 /* if(max<arr1[i]) 35 max=arr1[i];*/ 36 max=Math.max(max,arr1[i]); 37 } 38 System.out.print(max);//打印最大值 39 40 in.close(); 41 } 42 }
三、运行截图
浙公网安备 33010602011771号