一维数组最大子数组(一)

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

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

思路:把每个和放在二维数组中,找出最大数根据i和j的关系就找到最大数组,不过时间复杂度是o(n^2),还在试着用链表的方式可以使他的时间复杂度是o(n^2)输出

代码:

#include <iostream>
#define N 8
using namespace std;

void main()
{
    int fuhao,a[N],b[N][N]={0},k=0;
    int i,j,I,J;
    for (i=0;i<N;i++)
    {
        fuhao=rand()%2;
        a[i]= (fuhao==0) ? -rand()%100:rand()%100;
        cout<<"a["<<i<<"]="<<a[i]<<endl;
    }
    for (j=0;j<N;j++)
    {
        b[0][j]=a[j];
    }
    for(j=0;j<N;j++)
    {
        for (i=1;i<N-j;i++)
        {
                b[i][j]=a[i+j]+b[i-1][j];
        }
    }

    for (i=0;i<N;i++)
    {
        for (j=0;j<N;j++)
        {
            if(b[i][j]>k)
            {
                k=b[i][j];
                I=i;
                J=j;
            }
        }
    }
    cout<<endl;
    cout<<"k="<<k<<endl;
    cout<<"最大子数组为:"<<endl;
    for (i=0;i<I+1;i++,J++)
    {
        cout<<J<<"   "<<a[J]<<endl;
    }
    cout<<endl;
}

截图:

原文地址:https://www.cnblogs.com/hongyedeboke/p/4359641.html