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

实验要求:
n要求程序必须能处理1000 个元素;
n每个元素是int32 类型的;
n输入一个整形数组,数组里有正数也有负数。
n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
n求所有子数组的和的最大值。要求时间复杂度为O(n)。 
 

2. 设计思路:

   先使用sranda(time(null))函数随机产生一千个数,对数组进行遍历从左边第一个数向右相加令这个和值为B当B小于0时令B赋值为0。令结果赋值为MAX当MAX为0时依次比较将最大的数赋值给MAX。

3源代码:

  

#include <iostream>

#include<stdlib.h> using namespace std;

#include<time.h> #define MAX 1000;

 int main()  

  {      int i;   int a[10000];    

     int max = 0;    

      int b = 0;

       srand(time(NULL));

     cout<<"请输入数组整数个数:"<<endl;

       for (i = 0; i<1000; i++)    

       {       

           a[i] = rand();   

         }    

    for (i = 0; i<1000; i++)   

       {      

           cout << a[i] << '\t';  

      }      

        cout << endl;     

      for (i = 0; i < 1000; i++)    

      {   

                      b = a[i]+b;  

                           if (b < 0)            

                                b = 0;    

                           if (b > max)         

                               max = b;   

                               }    

                  if (max == 0)    

                  {  

                       max = a[0];    

                       for (i = 0; i < 1000; i++)      

                             {    

                                 if (max < a[i])      

                                   {       

                                       max = a[i];            

                                     }       

                             }     

                       }  

                       cout <<"最大子数组的和:"<< max << endl;      system("pause");      return 0;

      }

程序运行结果

总结

我们之前做的数组长度我们在测试时一般都填得很小,并且给每个元素的赋值也不超过两位数,甚至是固定了,都是为了方便直接找到一个和是最大的子数组,这都不能测试出程序哪里有不足,无论是数量还是数值的大小。通过随机产生的1000个数据我们发现了问题。因为已经把时间复杂度的概念给彻底忘了,这个程序也就没有考虑。因此我们应该对事件的复杂度有足够的重视。

程序分析,编写代码:李志鹏

代码检核:刘逸帆

猜你喜欢

转载自www.cnblogs.com/lzp1/p/9786775.html