结对开发训练(郭林林&胡潇丹)

  此次编程题为:求一个整数数组最大子数组之和,要求时间复杂度为O(n)。

  首先,我们对题目做出分析,做出第一种预行方案,即定义一个数组,当数组中元素大于等于0时,进行累加;若小于0,则与后面的数作比较,若和大于0则继续累加,小于零则以刚才的结果作为一个值,以此类推,最后比较各值,找出最大值。但在编程的过程中,发现这样做很繁琐,同时发现问题,即若有0,或两个值相等该取哪个。最后进行改进,得到最后结果。在做测试时,主要有四类,全正,全负,全0和有正有负有0,每组数也有改变。

  通过这次互换驾驶员与领航员的角色,让我们开阔了思路,逐步完善方案,体验到了结对开发的优势。

 1 #include<iostream.h>
 2 int begin,end,max;
 3 void Max(int s[],int n)
 4 {
 5     int c,d;
 6     c=max=s[n-1];
 7     d=n-1;
 8     begin=n-1;
 9     end=n-1;
10     for(int i=n-2;i>=0;i--)
11     {
12         if(c>0)
13             c=c+s[i];
14         else
15         {
16             c=s[i];
17             d=i;
18         }
19         if(max<=c)
20         {
21             begin=i;            
22             end=d;            
23             max=c;
24         }
25     }
26 }
27 void main(){
28     int e1[6]={0,0,0,0,0,0};
29     int e2[6]={1,2,4,5,6,3};
30     int e3[6]={-3,-3,-1,-5,-4,-7};
31     int e4[6]={1,4,0,-3-1,8};
32     Max(e1,6);
33     cout<<"e1×î´ó×ÓÊý×éÖ®ºÍΪ"<<max<<endl;
34     Max(e2,6);
35     cout<<"e2×î´ó×ÓÊý×éÖ®ºÍΪ"<<max<<endl;
36     Max(e3,6);
37     cout<<"e3×î´ó×ÓÊý×éÖ®ºÍΪ"<<max<<endl;
38     Max(e4,6);
39     cout<<"e4×î´ó×ÓÊý×éÖ®ºÍΪ"<<max<<endl;
40 }

原文地址:https://www.cnblogs.com/huxiaodan/p/3611199.html