4月2日课堂练习

Posted on 2016-04-08 17:00  Young丶  阅读(132)  评论(0)    收藏  举报

一、设计思路

由于题目要求时间复杂度为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 }

三、运行截图