一、题目:
返回一个整数数组中最大子数组的和。
要求:
1.输入一个整形数组,数组里有正数也有负数。
2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。要求时间复杂度为O(n)。
二、设计思路
1.数组num[]长度已确定是N,将数组中字数组的和放到数组sum[]中;
2.sum[0]=num[0],sum[1]=num[0]+num[1],sum[2]=num[0]+num[1]+num[2]……;
sum[N]=num[1],sum[N+1]=num[1]+num[2]……如此循环,直至所有自己的和全部存进 数组sum中;
3.然后求出数组sum中的最大值,再输出结果;
4.单独判断一些特殊的容易计算的情况,比如全是负数、全是正数、只有一个正数。这样能有效地提高程序的效率。
三、源代码
1 // 求和.cpp : Defines the entry point for the console application. 2 // 2015/3/18 16:12 袁佩佩 于海洋 信1201-1班 3 4 #include "stdafx.h" 5 #include"iostream.h" 6 #define SIZE 5 //数组的个数 7 #define MAXSIZE 100 //子集个数的最大值 8 void CaculateSum(int sum[],int length,int num[])//计算数组中各个子集的和 9 {10 int j=0;11 for(int i=0;i>num[i];58 if(num[i]<0)59 count[0]++; //负数的个数60 else61 count[1]++; //正数62 }63 acc=GetAcc();64 for(i=0;i
四、结果截图
五、心得体会
我和于同学之前就经常合作,所以这次搭档还算顺利。我俩上课的时候就讨论出了这个题目的大体思路,今天我们又对算法的具体实现进行了讨论和调试。
俗话说:“男女搭配,干活不累。”我比较细心,他比较有执行力。于同学可以带起整个编程创作的气氛,我也很快进入状态,能够及时准确的发现他的错误并快速改正。整个过程效率比自己编程时要高。
其实一开始我根据我和搭档确定的思路写出了算法,但是运行时有错并且特别复杂。我们调试了几次都没能成功,于是他就换了种思考方式,很快写了新的算法。经过几次调试之后,程序成功运行了。这一点我挺欣赏他的,因为它发现这条路走不通或特别难走时,可以马上改变路径正确的到达目的地。
六、有图有真相
请无视我那无神的双目,和那油油的头发...