C++求最大子数组之和

#include <iostream>
using namespace std;

int getmaxsum(int a[],int n)
{
    int i = 0;
    int j ;
    int k;
    int sum = 0;
    int save = 0;
    for (; i <= n; i++)
    {
        for (j = 0; j < i; j++)
        {

            for (k = j; k < i; k++)

            {
                sum += a[k];
            }

            save = save>sum ?  save : sum;

            sum = 0;

        }
    }
    cout << save << endl;
    return 0;
}

int main()
{
    int a[] = { 1, 3, 33,-5, 44, 3 };
    getmaxsum(a, 6);
    return 0;
}
#include <iostream>
using namespace std;

int Grial(int a[],int n)
{
    int sum = 0;
    int b = 0;
    for (int i = 0; i < n; i++)
    {
        if (b < 0)
            b = a[i];
        else
            b += a[i];
        if (b>sum)
            sum = b;
    }
    return sum;
}
int main()
{
    int a[] = {2,3,4,5,6,7,8,-22,1};
    cout << Grial(a,9);
    return 0;
}
时间: 2024-10-17 13:28:48

C++求最大子数组之和的相关文章

环形数组求最大子数组之和

环形数组求最大子数组之和: 实验要求: 随机产生一个整形数组,假设首尾相连为环形,求其相连的字数组的和,并输出子数组的元素. 设计思路: 因为是环形,所以要考虑自设的头尾的情况,在此分为两大类考虑,一种为数组中存在正数情况,一种为全部为负数的情况: 在存在正数的情况中又可分为三种情况,一种为全部为正数的情况,一种为自设的头元素为正数,最后一种为自设的头元素为负数.根据这几种情况分类进行实现. 在实现过程中,对数组元素从头到尾进行遍历,如果遇到正数即用和相加,直到相邻的下一个为负数,即存放目前该最

求最大子数组之和

要求: 要求程序必须能处理1000个元素: 每个元素是int32类型的,出现子数组之和大于整型表示的最大范围会出现什么情况: 输入一个整形数组,数组里有整数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值,要求时间复杂度为O(n). 第一段处理1000个元素: 1 #include<iostream> 2 #include<stdlib.h> 3 #include<time.h> 4 using namespace

数组之求最大子数组之和(二)

相比第一次 这次数组改编为环形数组 所以最大子数组可以分情况讨论 1.和最大子数组没有跨过数组首尾 此时可以使用上一个程序的方法 2.和最大子数组跨过数组首尾 此时选择 数组总和-最小子数组和得到最大子数组和 最后再将两者进行比较 确定最大的子数组之和 代码如下 1 //可以分两个情况 2 //1.和最大子数组没有跨过数组首尾 3 // 此时可以使用上一个程序的方法 4 //2.和最大子数组跨过数组首尾 5 // 此时选择 数组总和-最小子数组和得到最大子数组和 6 //最后通过比较两个和的大小

最大子数组之和 2

题目:返回一个整数数组中最大子数组的和 要求:(在原有代码上进行迭代) 1.输入一个整数数组,数组中有正数和负数. 2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 3.如果数组a[0]……a[n-1]首尾相邻,允许a[i-1]……a[n-1].a[0]……a[j-1]之和最大. 4.同时返回最大子数组的位置. 5.求所有子数组的和的最大值. 分析: 在本次编写的代码中使用了可变数组vector,它与一般数组作为函数参数不同,当vecto作为函数的参数时,在声明或定义函数时,

Maximum Product Subarray 求最大子数组乘积

这个求最大子数组乘积问题是由最大子数组之和问题演变而来,但是却比求最大子数组之和要复杂,因为在求和的时候,遇到0,不会改变最大值,遇到负数,也只是会减小最大值而已.而在求最大子数组乘积的问题中,遇到0会使整个乘积为0,而遇到负数,则会使最大乘积变成最小乘积,正因为有负数和0的存在,使问题变得复杂了不少.. 比如,我们现在有一个数组[2, 3, -2, 4],我们可以很容易的找出所有的连续子数组,[2], [3], [-2], [4], [2, 3], [3, -2], [-2, 4], [2,

软件工程结对开发之求二维数组中连续最大子数组之和2

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 先调用以前求二维最大连续子数组之和的maxSubArray函数求一个首尾不相邻的二维最大连续子数组之和,接着用将第k列各元素左移一列可以再求一个最大连续子数组之和 ,循环m次(因为原二维数组有m列)求得每个

5、软件工程结对开发之求一维数组中连续最大子数组之和

一.题目:返回一个二维整数数组中最大子数组的和.二.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 三.设计思想 这个实验是在前几次实验的基础上,利用动态数组,为了满足首尾相连,所以在计算一次之后,要把该数放在数组的最后边,这样循环遍历最后求出最大子数组的和. 四.源代码 1 #include <iostream.h> 2 int

课堂练习求环整数组中最大子数组之和

设计思路:之前还有一个课堂练习,是用户输入一个整数组,求其中最大子数组之和,我借鉴的其他同学的代码,仅在此基础上修改的.运用try,catch使得用户不必在输入数组之前输入数组的长度,但是需要一个除整数以外的数来结尾.一共使用了3个循环,运用一个循环得出每个数组中最大子数组之和的最大值,一个是用来计算最大子数组之和,最后一个用来实现数组的前移.第一个循环中包着另外两个循环.总的来说,是在之前课堂练习的基础上增加了将一个数组中的每个数做一次最前面的数,从中求出最大值. 程序代码: 1 import

软件工程结对开发之求一个数组中连续最大子数组之和

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设sum[i]为以第i个元素结尾且和最大的连续子数组.对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且它们之和最大的连续子数组要么是以第i-1个元素结尾且它们之和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i] = max(sum[i-1] + arr[i], arr[i]).可以通过判断sum[i-1] + arr[i]是否大于arr[i]来做