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

Posted princehai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回一个整数数组中最大子数组的和相关的知识,希望对你有一定的参考价值。

一.要求

  1.要求程序必须能处理1000 个元素;

  2 每个元素是int32 类型的;

  3 输入一个整形数组,数组里有正数也有负数。
  4 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
  5 如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大。
  6 同时返回最大子数组的位置。
  7 求所有子数组的和的最大值。要求时间复杂度为O(n)。
二.设计思路
  首先随机生成IntNum个正负数输出五列,引入一个常量记录累加的和,buffer进行求和的数值个数,for语句进行的运算次数,如果累加和小于0,buffer重新初始化为0,sum始终记录下存在的最大和,为了数组允许首尾相连和最大的情况,如果累加数count1超过IntNum跳出循环,或者语句进行的运算次数超出数组数值的两倍。
三.代码及运行结果
#include<iostream>
#include<time.h>
#include<conio.h>
#define N 100000
using namespace std;
void RandIn(int IntNum,int A[])
{
    cout<<"整数"<<endl;
    for(int i=0;i<IntNum;i++)
    {
        A[i]=rand()-rand();
        cout<<A[i];  
        if(i%5==4)
            cout<<endl;
        else
            cout<<‘ ‘;
    }
}
void SelMax(int IntNum,int A[],auto &sum)
{
    auto buffer=0;
    int count1=0;
    int count2=0;
    for(int j=0;j<=IntNum;j++)
    {
        if(j==IntNum)
        {
            j=0;
        }
        buffer+=A[j];
        count1++;
        count2++;
        if(buffer<0)
        {
            buffer=0;
            count1=0;
        }
        if(sum<buffer)
        {
            sum=buffer;
        }
        if(count1>IntNum||count2>IntNum*2)
        {
            break;
        }
    }
}
void main()
{
     
    int IntNum;
    int A[N];
    int q=0;
    while(q==0)
    {
        auto sum=0;
        srand((unsigned)time(NULL));
        cout<<"输入整数的个数:";
        cin>>IntNum;
        RandIn(IntNum,A);
        SelMax(IntNum,A,sum);
        cout<<endl;
        cout<<sum<<endl;
        cout<<"是否继续测试(输入0则继续)";
        cin>>q;
        system("cls");
    }

 技术分享图片

 

 


 
四.心得体会 
  我设计出思路及其解决数据首尾相连和最大值的情况,同伴设计出程序,最后检校,有一处错误,最后找出,共同努力解决了。再一次体会到了结对开发的优点,实现了实际代码的开发。
五.结组照片

 技术分享图片

 










































































以上是关于返回一个整数数组中最大子数组的和的主要内容,如果未能解决你的问题,请参考以下文章

返回一个二维整数数组中最大联通子数组的和

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

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

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

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

返回一个整数数组中最大子数组的和(首尾相连)