求一个整数数组的最大连续子数组的和

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

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

求所有子数组的和的最大值。

int max(int a,int b)
{
    if(a>b)
    {
       return a;
    }
    else
    {
       return b;
    }
}
int maxsum(int a[], int n)
{
    int i;
    int maxsofar = 0;
    int maxendinghere = 0;
    for (i = 0; i < n; i++)
    {
        maxendinghere = max(maxendinghere + a[i], 0);
        maxsofar = max(maxsofar, maxendinghere);
    }
    return maxsofar;
}
int main()
{
    int n, i=0;
    cout<<"输入元素个数:";
    cin>>n;
    cout<<"输入整数数组:";
    int a[100000]={0};
    for(i=0;i<n;i++)
    {
        cin>>a[i];
    }
    int max=maxsum(a, n);
    cout << "最大连续子数组的和为:" << max << endl;
    system("pause");
}

  

  

原文地址:https://www.cnblogs.com/zjk0109/p/9786039.html

时间: 2024-10-10 04:45:05

求一个整数数组的最大连续子数组的和的相关文章

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

遍历一遍,找连续的正数求和,同时比较求和的大小,最后输出最大的和就可以. 源代码: #include <iostream>#include<time.h>using namespace std;int maxSum(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(sum<b)   sum=b; } return sum;

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

#include<iostream> using namespace std; #define N 1000 int main() { int i,j; int num,value,max=0; int val[N]; int Array[N]; int firstNum=0,lastNum=0; cout<<"输入数的个数:"; cin>>num; for(i=0;i<num;i++) { cin>>val[i]; } value

返回一个二维整数数组中最大联通子数组的和6

1 问题:返回一个二维整数数组中最大联通子数组的和 2 思路:对n*m的二维数组进行分解,分解为n个一维数组,再先求这n个一维数组的最大子数组和,并记下每行最大一维子数组的下标如2-5,这是就会分两种情况第一种是行之间的最大子数组是相连的,如第一行是2-5,第二行是3-6,这是直接相加就行.第二种是不相连的如第一行是2-5,第二行是6-7,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价.最后就可求出最大联通子数组的和. 3 代码 #include<ios

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

设计思想:(1)首先把这个二维数组按行的数目分解为与列数目具有相同数目的一维数组: (2)再分别求出这几个一维数组的最大连续子数组之和,分别记录每一个最大连续数组的首末位置: (3)接着分别比较看这几个一维数组的首末位置是否处于矩阵上相连的位置,找出位置上相连且之和为最大的数组,输出它们的和即可. 源代码: #include<iostream> using namespace std; int Max(int n,int a[],int *smark,int *mmark) { int b[1

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

题目:返回一个二维整数数组中最大联通子数组的和. 要求:输入一个二维整形数组,数组里有正数也有负数.求所有子数组的和的最大值. 一.设计思想 先求出这个这个数组中的最大值,并定位,然后找出这个值周围的4个数,联通这4个数中的正数,若全为负数,则查找次大值,并与最大值联通,判断联通前与联通后值得大小,若变小则不联通最大值,若变大则联通最大值,以此类推,直到最大联通子数组怎么联通都比原来的值小.

求数组中任何连续子数组的最大和,并打印最大子数组(求开始和结束下标)

//计算数组中任何连续子数组的最大和,并打印最大子数组(求开始和结束下标) //思路:1:当数组元素全为0时,输出最大的那个负数 //      2:当数组有正有负时,i=0遍历数组,从大于0的那个元素开始,记录此时的下标为shart(最大子数组起始下标),从start开始遍历剩下的元素,若元素和num大于max的值则更新max, //    且将此时的下标赋值给end(最大子数组终止下标),当num小于0则说明后面出现的(如果出现)最大子数组不可能包含这些元素,所以退出内层循环,继续外层循环,

求二维整数数组中最大联通子数组的和

1 问题:返回一个二维整数数组中最大联通子数组的和 2 思路:对n*m的二维数组进行分解,分解为n个一维数组,再先求这n个一维数组的最大子数组和,并记下每行最大一维子数组的下标如2-5,这是就会分两种情况第一种是行之间的最大子数组是相连的,如第一行是2-5,第二行是3-6,这是直接相加就行.第二种是不相连的如第一行是2-5,第二行是6-7,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价.最后就可求出最大联通子数组的和. 3 代码 1 #include<i

返回一个二维整数数组中最大联通子数组的和(思路)

返回一个二维整数数组中最大联通子数组的和 题目: 输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值. 思路: (方法一)首先若要对二维数组进行分析,通常想要把它化简成为一个一维数组.再先求每个一维数组的最大子数组和,并记下每行最大一维子数组的下标.这是就会分两种情况:第一种是行之间的最大子数组是相连的,这时就可以直接相加得到:第二种是不相连的,,这时候就把每行的最大子数组看成一个整体,再使每个最大数组块进行相连,求使其相连的最小代价.最后得到的就是最大联通子数组的和. (方

分治策略求解数组的最大连续子数组的和

对于一个数组,尽可能地划分成两半(二分),加和最大的连续字数组或者在左边,或者在右边,或者跨越中间,一部分在左边,一部分在右边. 那么只要求出左半段数组的加和最大的连续子数组的和,求出右半段数组的加和最大的连续子数组的和,求出跨越中间的最大连续字数组的和,只要通过三者判断求出最大的那么就是整个数组最大的连续子数组的和. 那么找出左半段和右半段的最大连续子数组的和其实就是比原问题规模更小的一个问题,因此对于左半段和右半段求解加和最大的连续子数组的和可以通过递归求得. 下面给出具体实现:. 首先是调