二维数组最大值首尾相连

Posted oliverqueen

tags:

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

 

题目要求:

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

输入一个整形数组,数组里有正数也有负数。

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

如果数组A[0]……A[j-1]首尾相邻,允许A[i-1],…… A[n-1],A[0]……A[j-1]之和最大。
同时返回最大子数组的位置。

设计思路:

数组首尾相连,可在任意位置将数组剪断,然后将剪断位置之前的数组数据按照顺序接在原数组之后形成新数组。然后开始遍历数组,同时设置N让N的最大值为原数组长度,使得遍历时最大子数组长度不会超出原长度。

源代码:

#include <iostream>
using namespace std;
#define N 1000
int main(int argc, char* argv[])
{
    int arry[N];
    int length=1;
    int max[N],max1;
    int maxweizhi[N];
    int num=0;
    int value( int arry[],int length);
    cout<<"请输入数组:"<<endl;
    cin >> arry[0];
    while (getchar() != ‘ ‘)   
    {
        cin >> arry[length];
        length++;
    }
  
     for(int j=length;j<2*length-1;j++)  
    {
        arry[j]=arry[num];
        num++;
    }
 
    cout<<"由这几个数形成的环形数组";
    value(arry,2*length-1);
    return 0;
}
int value( int arry[],int length)
{
    int max[N],max1;
    int maxweizhi[N];
    for(int j=0;j<(length+1)/2;j++)
    {
        int sum=0;
        max1=-99999;                  
        int z=0;
        for(int i=j;i<(length+1)/2+j;i++)  
        {
            sum=sum+arry[i];
            if(sum>=max1)
            {
                max1=sum;
                z++;
            }
        }
        max[j]=max1;
        maxweizhi[j]=z;
    
    }
    int fmax=max[0];
    int q=0;
    for(int i=0;i<(length+1/2);i++) 
    {  
        if(max[i]>fmax)
        {
            fmax=max[i];
            q=i;
        }
    }
 
    int weizhi=maxweizhi[q];
 
    cout<<"最大子数组的和为:"<<endl;
    for(int num=q;num<q+weizhi;num++) 
    {
        cout<<arry[num];
    }
 
    cout<<"最大子数组的和为:  "<<fmax<<endl;
    return 0;
}

技术分享图片

结组人:倪彤炜 谷豪磊

技术分享图片

 










































































以上是关于二维数组最大值首尾相连的主要内容,如果未能解决你的问题,请参考以下文章

返回二维数组最大联通子数组的和

返回二维数组最大联通子数组的和

课堂练习:返回一个二维数组中最大子数组的和

课堂练习;返回一个二维数组中最大子数组的和

二维数组最大子数组(结对开发)

二维数组最大子数组(结对开发)