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

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

 

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

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

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

一、设计思想

1.首先随机产生一个数组,数组长度可自行输入,该数组里有正数也有负数。

2.从数组中第一个元素a[0]开始,依次计算a[0]、a[0]+a[1]、a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值。

3.再从数组第二个元素a[1]开始,依次往后计算每个子数组的和,取出最大值。

4.依次循环,循环num次,直到数组最后一个元素,将每次求得的最大值存到一个数组list[]中。

5.比较每次得出的子数组的和的最大值,再得出最大值。

二、源程序

 1 //作者:王雪青   陆宇

 2 //日期:2015年3月18日

 3 package com.java.lianxi;

 4

 5 import java.util.*;

 6 public class lianxi2

 7 {

 8     public static void main(String[] args)

 9     {

10         Scanner input=new Scanner(System.in);

11         System.out.print("请输入数组中数的个数:");

12         int num=input.nextInt();

13         int array[]=new int[num];

14         for(int i=0;i<num;i++)

15         {

16             if((int)(Math.random()*2)==0)

17             {

18                 array[i]=(int)(Math.random()*10);

19             }

20             else

21             {

22                 array[i]=-(int)(Math.random()*10);

23             }

24         }

25         for(int i=0;i<num;i++)

26         {

27             System.out.println(array[i]);

28         }

29         int max=0;

30         int list[]=new int[num];

31         for(int j=0;j<num;j++)

32         {

33             max=array[j];

34             int sum=0;

35             for(int t=j;t<num;t++)

36             {

37                 sum=sum+array[t];

38                 if(sum>max)

39                 {

40                     max=sum;

41                 }

42             }

43             list[j]=max;

44         }

45         for(int i=0;i<num;i++)

46         {

47             System.out.print("第"+(i+1)+"次比较的子数组的和的最大值为:");

48             System.out.println(list[i]);

49         }

50         for(int i=1;i<num;i++)

51         {

52             max=list[0];

53             if(list[i]>max)

54             {

55                 max=list[i];

56             }

57         }

58         System.out.print("子数组和的最大值为:"+max);

59     }

60 }

61    

三、运行结果截图:

原文地址:https://www.cnblogs.com/zhaochenguang/p/8299246.html