返回一个整数数组中最大子数组的和。(二人结对编程)

Posted guantianhuan

tags:

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

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

要求:

  1.要求程序必须能处理1000 个元素;
  2.每个元素是int32 类型的,出现子数组之和大于整型表示的最大范围会出现什么情况;
  3.输入一个整型数组,数组里有正数也有负数。
  4.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
  5.求所有子数组的和的最大值。要求时间复杂度为O(n)。 
 
设计思想:
(1)将数组大小定义为n,用户输入p的值以确定该数组的长度,对于这n个元素用随机函数进行生成,每个元素定义为int32类型。
(2)为了满足要求3,我们将随机函数写成 a[i] = rand()%2001-1000 ,随机生成(-1000,1000)中的数。
(3)先定义一个int类型的max,值为0,以后用它来存储最大子数组的和,再定义一个int类型的b,用它来求累加和(即各个子数组的和)。当b<0时,清空b中原有元素和,继续从下一元素累加,同时将之前最大的累加和存入max更新,依次循环直到i<n时结束。而当整个数组元素均为非正整数时,找出数组中最大元素,存入max。
 
源代码为:
 1 #include <iostream>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int i;
 9     int n;
10     int *a;
11     int max = 0;
12     int b = 0;
13 
14     cout<<"请输入数组元素个数:"<<endl;
15     cin>>n;
16     a=new int[n];
17     srand(time(NULL));
18     cout<<"数组为:"<<endl;
19     for (i = 0; i<n; i++)
20     {
21         a[i] = rand()%2001-1000 ;
22     }
23     for (i = 0; i<n; i++)
24     {
25         cout << a[i] << 	;
26     }
27     cout << endl;
28 
29     for (i = 0; i < n; i++)
30     {
31         b += a[i];
32         if (b < 0)
33             b = 0;
34         if (b > max)
35             max = b;
36     }
37     if (max == 0)
38     {
39         max = a[0];
40         for (i = 0; i < n; i++)
41         {
42             if (max < a[i])
43             {
44                 max = a[i];
45             }
46         }    
47     }
48     cout <<"最大子数组为:"<< max << endl;
49     system("pause");
50     return 0;
51 }

结果截图:

技术分享图片技术分享图片技术分享图片

  

溢出测试:
为了测试要求2的问题,我们在取数的时候对其进行了乘4294967296的操作,即将随机函数写成a[i] = rand()*4294967296 ,使数组内的元素可以越界。

结果如下:

 

技术分享图片技术分享图片

 

可以看出程序有溢出时,运行结果会使每个元素显示为0,程序出错。
总结:当我们想要处理的数组元素个数太多(如1000个)时,不可避免的就会使程序的运算时间增长很多,这让我们意识到,在进行大量数据处理的时候,认真考虑所用算法的时间复杂度,从而选择相对简单的算法的重要性,不止可以提高效率,还能降低出错率。

 合作美图:

 

                                                                                                            技术分享图片

                                                                                                           (图为20163953 关甜欢和20163955 王美仪合作时照片)

















以上是关于返回一个整数数组中最大子数组的和。(二人结对编程)的主要内容,如果未能解决你的问题,请参考以下文章

返回一个二维整数数组中最大子数组的和(二人结对)

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

结对开发——返回一个整数数组中最大子数组的和

课堂练习;返回一个二维数组中最大子数组的和

结对开发-返回一个整数数组的最大子数组的和

课堂练习:返回一个二维数组中最大子数组的和