首尾相接整数数组中最大子数组的和

设计思路:

  可以分为两种情况:一种不跨数组第一个数的,一种是跨过第一个数的,不跨第一个数的利用上次的算法进行计算,跨数组的求首尾相接子数组和的最大值,可以考虑反面最小值的情况,然后利用总和减去最小值就是最大值的情况,最小值的求法与最大值相同。

程序源代码:

#include<iostream>
using namespace std;
#include<vector> 

int main()
{
    int i,len;
    int max0=0,max1=0,sum=0,min=0,sum0 = 0;
    cout<<"请输入数组长度;";
    cin>>len;
    int *array = new int[len];
    cout<<"请输入数组内容:"<<endl;
    for(i=0;i<len;i++)
    {
        cin>>array[i];
    }

    for(i=0;i<len;i++)
    {
        sum = sum + array[i];

        if(sum<0)
        {
            sum = 0;
        }
        if(sum>max1)
        {
            max1 = sum;
        }
    }

    for(i=0;i<len;i++)
    {
        sum = sum + array[i];
        if(sum>0)
        {
            sum = 0;
        }
        if(sum<min)
        {
            min = sum;
        }
    }

    for(i=0;i<len;i++)
    {
        sum0 = sum0 + array[i];
    }

    max0 = sum0-min;

    if(max1 == 0)
    {
        max1 = array[0];
        for(i=1;i<len;i++)
        {
            if(array[i]>max1)
            {
                max1 = array[i];
            }
        }
        cout<<"最大子数组和为"<<max1<<endl;
    }
    else
    {
        if(max0>max1)
        {
            cout<<"最大子数组和为"<<max0<<endl;
        }
        else
        {
            cout<<"最大子数组和为"<<max1<<endl;
        }
    }

    delete[] array;
}

运行结果截图:

总结:

  可以利用对立面来考虑算法。

时间: 2024-08-05 10:04:20

首尾相接整数数组中最大子数组的和的相关文章

返回一个首尾相接的二维整数数组中最大子数组的和

一.题目:返回一个二维整数数组中最大子数组的和. 二.要求: (1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组首尾相接,象个一条首尾相接带子一样. (3)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (4)求所有子数组的和的最大值. 三.解题思路: 将两个同样的数组首尾相接合并成一个数组,在用以前求二维数组最大子数组的方法求解 四.源代码: #include<iostream> using namespace std; #include"math

返回一个整数数组中最大子数组的和,首尾相接

设计思想 遍历数组的时候将数组中第一个数变成最后一个数,这样就得到了好几个新的数组,然后输出每个数组的最大子数组的和,在比较每个输出结果,找到最大的子数组和. 代码 #include <iostream> #include<ctime> #define Num 10000 using namespace std; int DTGH_Sum(int a[],int n) { int sum = 0; int *b = (int *) malloc(n * sizeof(int));

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

题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二维数组首尾相接,象个一条首尾相接带子一样. 3 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 4 求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思想 目前的解决方案是最笨的方法,穷举,所以时间复杂度达不到题目的要求,还需要进一步的寻找答案 源代码 题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二

软件工程课堂练习:返回一个一维整数数组中最大子数组的和

题目:返回一个一维整数数组中最大子数组的和.要求:输入一个一维整形数组,数组里有正数也有负数.一维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值. 此次何琳琳负责程序分析,代码编程,张一博负责代码复审和代码测试计划. 经分析讨论设计思路如下: 1.定义一个长为20的数组,先对前10个数进行初始化,后10个数等于前10个数: 2.设置长度为10的循环依次以前十个数为头进行最大子数组的计算: 3,再设置一个数组用来存储

返回一个二维整数数组中最大子数组的和(头尾相接)

1.题目. 题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 2.设计思想. 分别求出每一行的最大子矩阵,然后再两行相加,求出最大子矩阵,一直到所有的行相加,求出最大子矩阵.比较其中最大的子矩阵值,找出最大的. 3.代码. #include<iostream> using namespace

返回一个一维整数数组中最大子数组的和(环)

题目: 返回一个一维整数数组中最大子数组的和. 要求: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 设计思想: (1)存在三个一维数组.第一个用于存储 输入的数组:第二个用于存储不同子数组的最大值:第三个用于存储 起始点不同的数组的最大值. (2)1.定制输入整数的个数 2.创建第一个一维数组,将数字输入 3. 利用循环,将所存在的第一个数组的数,进行加法

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

题目:返回一个二维整数数组中最大子数组的和2 要求:输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路: 代码: 截图: 总结:

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

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大 两人结对完成编程任务.一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照).(截止到周四4月21日24:00) 二.设计思路 本次实验设计思路非常简单,就

返回一个二维整数数组中最大子数组的和(圆柱形)

题目: 返回一个二维整数数组中最大子数组的和 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 组员: 陈晨:负责代码复审和代码测试计划 王颖瑞:负责程序分析,代码编程 思路: 本次的任务是二维数组的环状求最大子数组,结合前两次的开发经验我们把一维数组环状的思路继续在二维数组中使用,首先输入数组时令数组的列扩大一倍,也就是令数组后的数组长度的值与前边的数

返回一个首尾相连的整数数组中最大子数组的和

一.题目:n返回一个整数数组中最大子数组的和. 二.要求: (1)n输入一个整形数组,数组里有正数也有负数. (2)n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (3)n如果数组A[0]……A[j-1]首尾相邻,允许A[i-1], …… A[n-1], A[0]……A[j-1]之和最大. (4)n同时返回最大子数组的位置. (5)求所有子数组的和的最大值.要求时间复杂度为O(n). 三.实验思路: 思路一:将一个数组的元素输入,构造一个新数组,新数组是由两遍输入的数组构成,