个人作业1-数组

题目:返回一个整数数组中最大子数组的和。

要求: 输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)

设计思路:首先创建一个数组,生成随机数。

将数组里的数字相加,将相加的结果与第二个数作比较,如果大于第二个数,则继续相加

反之,则放弃前面的数字,与后面的数字相加,以此类推

 1 package 数组和;
 2 import java.util.Scanner;
 3 public class A {
 4     public static int getMax(int arr[]){//定义一个函数求数组中最大子数组和
 5         int maxSum=arr[0];
 6         int temp=0;//用来存储连续子数组的和
 7         for(int i=0;i<arr.length;i++)
 8         {
 9             if(temp<0)
10             {
11                 temp=arr[i];//当子数组的和为负数时直接抛弃并把当前数字赋给它
12                 if(temp>0&&maxSum<temp )//当temp小于0后出现第一个大于0的temp时且大于原来的maxsum赋值
13                 {maxSum=temp;}//一开始没写该语句当输入1,-2,4的时候输出1出现逻辑错误
14             }
15             else
16             {
17                 temp+=arr[i];//如果连续数字和为正则继续加下去
18                 if(maxSum<temp)
19                 {
20                     maxSum=temp;//当现有连续数字和大于之前最大连续数字和时更新最大值
21                 }
22             }
23         }
24         return maxSum;
25     }
26     public static int max(int arr[]){
27         int max=arr[0];
28         for(int i=0;i<arr.length;i++)
29         {
30             if(max<arr[i])
31             {
32                 max=arr[i];
33             }
34         }
35         return max;
36     }
37     public static void main(String[] args){
38         int []array=new int[100];
39         System.out.println("请输入要求解的数组个数:");
40         @SuppressWarnings("resource")
41         Scanner reader=new Scanner(System.in);
42         int n=reader.nextInt();
43         System.out.println("请输入要求解的数组:");
44         int[] result=new int[array.length];
45         for(int i=0;i<n;i++)
46         {
47             array[i]=reader.nextInt();
48         }
49         for(int i=0;i<array.length;i++)
50         {
51             int temp=array[0];
52             for(int i1=0;i1<array.length-1;i1++)
53                 {
54                     array[i1]=array[i1+1];
55                 }
56             array[array.length-1]=temp;
57             result[i]=getMax(array);
58         }
59         int r=max(result);
60         System.out.println("最大子数组和为:"+r);
61     }
62 }

 

 总结:这道题比较难的就是理清思路

posted @ 2020-02-28 15:12  城南漠北  阅读(127)  评论(0编辑  收藏  举报