统计连续子数列的最值

11 篇文章 0 订阅
4 篇文章 0 订阅

给定一个整型数组,数组中的数组元素可能为正也可能为负值,求出该数组中元素连续相加的最大值。也就是求出和值最大的子数列。
比如给定一个数组 a【8】 = {1,-2,-5,3,8,-7,9,4},这个很显然,
最大的和值为a【3】+a【4】+a【5】+a【6】+a【7】 = 3+8+ -7+9+4=17 的值。
我想了最笨的方法:
就是把每个连续的子序列组合找出来,然后求出和值,然后挑出最大的就可以了。
我们可以用下图演示一下:

这里写图片描述

下面是一段简单测试代码:

#include<stdio.h>
int findSub(int a[],int size);
void PRINT(int a[],int size);
int main()
{
    int a[8]={1,-2,-5,3,8,-7,9,4};
    PRINT(a,8);
    int Max = findSub(a,8);
    printf("MaxSub:  %d\n",Max);

    return 0;
}


void PRINT( int a[],int size)//数组打印
{
    int i;
    for(i=0;i<size;i++)
    {
        printf("%d / ",a[i]);
    }
    printf("\n");
}


int findSub(int a[],int size)
{

    int i,j,max;
    int sum ;
    max = a[0];//初始假设max 是a【0】的值

    for(i=0;i<size;i++)//从第一个开始*,**和后面的每一个组合为一个子序列***
    {
        sum = a[i];//初始和值sum为a【i】;

        for(j=i+1;j<size;j++)//**i 以后的每一个**
        {


            sum += a[j];//和值累加

            if(max < sum)//如果假设的max 小于 所求的 sum的值
                max = sum;//max更改为 sum的值

                printf("i=%d: j=%d: sum=%d: max=%d: \n",i,j,sum,max);//输出当前的i,j,sum,max
        }

    }

    return max;//返回max值
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值