二维数组最大值首尾相连

题目要求:

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

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

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

如果数组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() != ‘\n‘)   
    {
        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;
}

结组人:倪彤炜 谷豪磊

原文地址:https://www.cnblogs.com/oliverqueen/p/9904330.html

时间: 2024-11-05 11:23:23

二维数组最大值首尾相连的相关文章

取二维数组最大值

//取二维数组最大值 var test=[[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]]; //1. junior    function getMaxOne(arr){        var tmp=[];        for(var i=0;i<arr.length;i++){            tmp[i]=0;            for(var j=0;j<arr[i].length;j++){ if(tmp[i]&l

二维数组最大值

1.题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 2.设计思路 我们刚开始时是这么想的:就是最笨的方法:求每一个子矩阵的和,然后找最大值,我们知道这种方法会比较麻烦.后来我们联想到了上次写的一维数组,就想把二维数组转化为一维数组,然后按照一维数组的方法来做. 那么问题来了,把二维数组转化为一维数组后,怎么可以保证是连续的一个

Matlab找二维数组最大值

1.m先max(x)求出每列最大值,返回行向量,再max对行向量求出最大值,就是max(max(x)). 注意:max(x),不管x是行列向量,只要是向量,那么就返回一个值. 2.先x(:)转为按列的列向量,然后max,就是max(x(:)).

二维数组首尾相连

一.设计思路:通过综合求二维数组的最大子数组.求首尾相连的一维数组的最大子数组的算法,得出如下思路:首先将二维数组的子数组上下相加转化成许多一维数组,然后按照求首尾相连的一维数组的算法,遍历一维数组的所有子数组,求出子数组的最大值,即为首尾相连二维数组的子数组的最大值,并且在遍历过程中保留取得最大值的位置,输出二维数组的最大子矩阵. 二.代码 import java.awt.Point; import java.util.Scanner; public class main { public s

首尾相连的二维数组的最大子数组

一.设计思路:通过综合求二维数组的最大子数组.求首尾相连的一维数组的最大子数组的算法,得出如下思路:首先将二维数组的子数组上下相加转化成许多一维数组,然后按照求首尾相连的一维数组的算法,遍历一维数组的所有子数组,求出子数组的最大值,即为首尾相连二维数组的子数组的最大值,并且在遍历过程中保留取得最大值的位置,输出二维数组的最大子矩阵. 二.代码: import java.awt.Point; import java.util.Scanner; public class main { public

二维数组首尾相连最大子数组

电脑坏了,忘了发了.... 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路: 将求二维数组最大子数组与一维数组首尾相连求最大子数组结合起来 代码: #include <iostream> #include <cstring> #include <assert.h> const

首尾相连的二维数组最大子数组求和

题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样. n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 结对开发过程: 这次的编程开发是基于上次的以为数

体验结对开发的乐趣(5)--(首尾相连的二维数组求最大子数组和的问题)

结对伙伴:信1201-2班高扬.信1201-1班韩雪东 一.题目要求与设计思想 题目要求:在上一次的基础上把数组变为二维数组,然后首尾相接,形成连环,然后求和最大的子数组: 设计思想:一维数组首尾相连的问题已经得到解决,二位数组求和最大的子数组的问题也已经解决了,就是把这两个程序思想融在一起,然后在短短的时间内就完成了这次课堂项目. 二.源代码 1 // erweishuzuqiuzuida.cpp : Defines the entry point for the console applic

二维数组求子数组之和最大值(首尾相接, 圆柱)

问题:求二维数组的子数组之和的最大值(首尾相接,即形成圆柱) 成员: 陈晨:负责代码复审和代码测试计划 王颖瑞:负责程序分析,代码编程 思路:对于这个问题,我们可以结合之前的实验(二维数组求子数组之和的最大值和首尾相连一维数组的子数组之和的最大值),把为二维数组的列扩大二倍,之后想一维数组(首尾相连)一样,把二维数组分成不同的几个二维数组.之后就分开求不同的二维数组的子数组的最大值,最后之间比较,求出总的最大值. 代码: #include<iostream> using namespace s