求一个整数数组中最大子数组的和

Posted noor9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个整数数组中最大子数组的和相关的知识,希望对你有一定的参考价值。

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

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

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

 思路比较简单,主要就是怎么去找这个最大

设置两个常量:最大值max和累加值tmp都初始化为数组第一个元素的值

判断tmp,如果tmp<0,tmp赋值为0,tmp+=a[i], 直至循环结束

其实就是通过首元素值(tmp)是否小于0,小于的话赋值0累加上其后继元素,判断max与tmp大小,并将大的值重新赋值给max。

循环上一步骤

例子:-1 2 -3 4 5  很容易得到这个数组的最大子数组和为9,通过我的思路,初始化tmp=a[0]=-1;

tmp<0,tmp=0,加上其后继元素tmp+2=2,tmp>0,加上其后继元素tmp+(-3)=-1<0,赋值为0,循环这个过程,不难得到结果9...

技术图片
 1 package test1;
 2 
 3 import java.util.Scanner;
 4 
 5 public class test1 {
 6     public static  int maxSum(int[] array){//得到最大子数组和
 7         if(null == array || array.length == 0){
 8             return 0;
 9         }
10         int tmp = array[0];
11         int max = array[0];
12         for(int i = 1; i < array.length; i++){
13             if(tmp < 0){
14                 tmp = 0;
15             } 
16             tmp += array[i];  
17             max = Math.max(max, tmp); 
18         }
19         return max;
20     }
21     static int[] generateRandomArr(int n,int min, int max) {//产生随机数组,参数n是大小,后面的是范围min-max
22         int [] a = new int [n];
23         for (int i = 0; i < n; i++) {
24             int random = (int) Math.floor(Math.random() * (max - min + 1) + min);
25             a[i]=random;
26         }
27         return a;
28     }
29     public static void main(String[] args) {
30         
31         int [] a = generateRandomArr(5,-5,5);
32         System.out.println("数组的大小:"+a.length+" ");
33         Scanner in=new Scanner(System.in);
34         /*int []a = new int[4];
35         for(int i=0;i<4;i++)
36         {
37             a[i]=in.nextInt();
38         }*///测试所用
39         System.out.print("数组元素:");
40         for(int i = 0;i < a.length; i++)
41         {
42             System.out.print(a[i]+" ");
43             if(i==a.length-1)
44             {
45                 System.out.println();
46             }
47         }    
48         System.out.println("数组子数组的最大和:"+maxSum(a));
49         
50     }
51 }
Java Code

第二种类型:数组不是平时的一维数组,而是环形数组

以上是关于求一个整数数组中最大子数组的和的主要内容,如果未能解决你的问题,请参考以下文章

返回一个二维整数数组中最大子数组的和

返回一个整数数组中最大子数组的和

返回一个二维整数数组中最大子数组的和

返回一个整数数组中最大子数组的和。(续2)---二维数组

求一个整数数组中最大子数组的和

返回一个整数数组中最大子数组的和