求子数组和最大值拓展

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

要求: 要求程序必须能处理1000 个元素; 每个元素是int32 类型的。

输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。

我的组员是朱少辉,我负责代码复审和代码测试。

设计思想:将数组长度范围扩大能够处理1000个数,而Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数,当大于该数时则会归零,可以用string类型来实现。

代码:#include<iostream>

#include<cmath>
using namespace std;
void main()
{
         int a[25000],i,j,f,n;
         int MaxSum = 0;
         int k = 0;
         cout<<"请输入数组中数字的个数"<<endl;
         cin>>n;
         for(i=0;i<n;i++)
         {
                   j=rand()%2+1;
                   f=pow(-1.0,j);
                   a[i]=f*rand()%100000;
          }

         cout<<endl;
         cout<<"最大子数组为";

        for(i=0;i<n;i++)
        {

                   k += a[i];
                   if(k > MaxSum)

                   {
                   MaxSum = k;
                    }
                   if(k < 0)

                   {
                   k = 0;

                   }

         }

         cout<<MaxSum<<endl;
}

截图:

技术分享

 

工作照:

技术分享

 出现问题:当数值过大或者数组长度过大时,计算机会报错,因为超出了int32类型的范围,所以可用String字符串解决问题。

总结:当两个人结对开发时,会有少许的碰撞和摩擦,但最终能够交换意见和看法,将问题简单化,更快地解决问题。可见合作对软件团队开发的重要性。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。