码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-02-28 15:35:18      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:思想   span   问题   最大   测试结果   stream   复杂   结果   system   

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

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

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

     求所有子数组的和的最大值。要求时间复杂度为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;
}

测试结果:

技术图片

 

 技术图片

 

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

标签:思想   span   问题   最大   测试结果   stream   复杂   结果   system   

原文地址:https://www.cnblogs.com/songxinai/p/12373481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!