返回整数数组最大子数组之和

Posted songxinai

tags:

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

题目:返回整数数组最大子数组之和

要求:输入一个整形数组,数组里有正数也有负数

     数组里连续的一个或多个整数组组成一个子数组,每个子数组都有一个和

     求所有子数组的和的最大值。要求时间复杂度为O(n)

   

设计思想:从第二个数开始,如果这个数加上前一个数大于这个数的值,令这个数的值等于这个数加上前一个数。从得到数组的第一个数开始比较,输出值最大的数

 

出现的问题:无

 

源代码

 

#include<iostream>
using namespace std;
int main()
{
    int a[100],n;
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 1; i < n; i++)
    {
        if (a[i] + a[i - 1] > a[i])
            a[i] = a[i] + a[i - 1];
    }
    int ans = -100000;
    for (int i = 0; i < n; i++)
    {
        if (a[i] > ans)
            ans = a[i];
    }
    cout << ans << endl;
    system("pause");
    return 0;
}

 

结果截图

 技术图片

 

 技术图片

 

技术图片

 

 

环形数组

设计思想:将a[0]~a[n-1]赋给a[n]到a[2n-1],和普通数组一样从第二个数开始比较并保证比较次数小于输入数组的个数,输出最大值。

出现的问题:一个数被取值两次,通过控制比较次数小于数组个数得到解决

源代码:

#include<iostream>
using namespace std;
int main()
{
    int a[100],n,sum=0,j=0;
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> a[i];
    for (int i = 0; i < n; i++)
    {
        a[n + i] = a[i];
    }
    for (int i = 1; i < 2 * n; i++)
    {
        if ((a[i] + a[i - 1] > a[i])&&j<n)
        {
            a[i] = a[i - 1] + a[i];
            j++;
        }
    }
    int m=a[0];
    for (int i = 0; i < 2 * n; i++)
    {
        if (a[i] > m)
            m = a[i];
    }
    cout << m << endl;
    system("pause");
    return 0;
}

测试结果:

技术图片

 

 技术图片

 

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

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

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

环形数组最大子数组之和

环形数组最大子数组之和

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

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