软件工程结对开发之求一维数组中连续最大子数组之和2

一、题目要求

题目:返回一个整数数组中最大子数组的和。
要求:
要求程序必须能处理1000 个元素;
每个元素是int32 类型的;
输入一个整形数组,数组里有正数也有负数;
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;
求所有子数组的和的最大值。要求时间复杂度为O(n);
结果溢出之后能判断。
二、设计思想
在求最大连续子数组时同样用动态法,对于新增的要求,可以增大随机产生数的倍数,如果结果溢出则输出溢出提示字样,其中int类型rand()随机产生数范围是0~32767,int32最大数是2147360000。
三、代码
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void main()
{
    while(1)
    {
        int length,temp;
        int *arr=new int[length];
        cout<<"请输入该数组长度:";
        cin>>length;
        //cout<<"请输入该数组:";
        srand((unsigned)time(NULL));
        for(int i=0;i<length;i++)
        {
            arr[i]=rand()*10000;
            temp=rand()%2;
            if(temp==0)
            {
                arr[i]=arr[i];
            }
            else
            {
                arr[i]=-arr[i];
            }
            cout<<arr[i]<<"\t";
        }
        int result = arr[0];
        int sum = arr[0];
        for(i=1;i<length;i++)
        {
            if (sum > 0)
            {
                sum += arr[i];
            }
            else
            {
                sum =arr[i];
            }
            if (sum >result)
                result = sum;
        }
        if(result<2147360000||result==2147360000)
        {
            cout<<"该数组中最大连续子数组之和是:"<<result<<endl;
        }
        else
        {
            cout<<"超出最大范围溢出!"<<endl;
        }
        cout<<"----------------------------------------"<<endl;
    }
}

四、测试截图

当输入数组长度为1000时没有溢出

技术分享

当输入数组长度为2000时发生溢出

技术分享

五、总结

以前没考虑到内存溢出情况,现在考虑溢出就得增大范围,溢出是个常见的问题,以后需要注意这种情况,对于溢出没办法解决只能提示溢出,在产生随机数时用的直接乘以10000导致产生的数后四位都是0000,有缺陷有待进一步改进。

六、工作合影

 技术分享

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