【数据结构与算法分析】2.4 求最大子序列和

原创 2015年11月19日 22:35:07

问题描述:

给出指定整数序列,求出最大的子序列和

解决思路:

方法一从i到j进行扫描,复杂度为O(N3);

方法二每次两重循环,复杂度为O(N2);

方法三循环一次,复杂度为O(N3),但是对输入所有数据为负数时是不成立的;

算法实现:

#include<stdio.h>
int MaxSeqSumOfN3(int a[],int n);
int MaxSeqSumOfN2(int a[],int n);
int MaxSeqSumOfN(int a[],int n);
int main() {
    int a[100] = {0};
    int n;
    while(scanf("%d",&n)!=EOF){
        int i ;
        for(i=0;i<n;i++){
            scanf("%d",&a[i]);
        }
        printf("%d\n",MaxSeqSumOfN3(a,n));
        printf("%d\n",MaxSeqSumOfN2(a,n));
        printf("%d\n",MaxSeqSumOfN(a,n));
    }
}
//求a[i]到a[j]之间的最大值
int MaxSeqSumOfN3(int a[],int n) {
    int i,j,k;
    int MaxSum = 0;
    for(i=0;i<n;i++){
        for(j=i;j<n;j++){
            int ThisSum = 0;
            for(k=i;k<=j;k++){
                ThisSum += a[k];
            }
            if(ThisSum>MaxSum)
                MaxSum = ThisSum;
        }
    }
     return MaxSum;
}
int MaxSeqSumOfN2(int a[],int n) {
    int i,j;
    int MaxSum = 0;
    for(i=0;i<n;i++){
        int  ThisSum = 0;
        for(j=i;j<n;j++){
            ThisSum += a[j];
            if(ThisSum>MaxSum)
                MaxSum = ThisSum;
        }
    }
     return MaxSum;
}
int MaxSeqSumOfN(int a[],int n) {
    int i;
    int ThisSum = 0;
    int MaxSum = 0;
    for (i = 0; i < n; i++) {
        ThisSum +=a[i];
        if(ThisSum > 0){
              if(ThisSum > MaxSum)
                MaxSum = ThisSum;
        }else{
            ThisSum = 0;
        }
    }
    return MaxSum;
}


相关文章推荐

求最大子序列和问题(读《数据结构与算法分析——C语言描述》有感)

根据《数据结构与算法分析——C语言描述》中的“最大子序列和”问题来看如何分析算法。...

数据结构与算法分析--最大子序列和问题

**最大连续子数列和一道很经典的算法问题,给定一个数列,其中可能有正数也可能有负数,我们的任务是找出其中连续的一个子数列(不允许空序列),使它们的和尽可能大。我们一起用多种方式,逐步优化解决这个问题。...

【数据结构和算法分析】最大子序列求和问题及联机算法

最大子序列求和问题

<数据结构与算法分析 C++描述>算法分析之最大子序列和问题

声明:这个系列博客是《数据结构与算法分析 C++描述》的读书笔记系列 参考博客:点击打开链接 本文是原书第二章内容,主要内容包括:算法的时间复杂度分析/算法的优化,分析的例子是很出名的最大子序列求...

数据结构与算法——给定整数A1,A2,....An,....(可能有负数),求该数据序列的最大子序列的和

求最大的子序列和问题

【算法与数据结构】最大子序列和问题

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.题目      给定一个数字序列,其中有正有负,确定最大子序列和。用穷举法最好的结果也是时间复杂度O(n...

【数据结构与算法】最大子序列和问题的求解

题目:给一个int类型的数组,就最大子序列的和 解法:一共有四种算法,算法的时间复杂度分别为: 【算法一】 结果是求一个子序列,即其实序列号和终止序列号,那我们就对所有可能的起止序列号...

求最大子序列问题-数据结构

问题描述 最大子序列问题是一个常见的数据结构问题,即求出给定数组{1,3,4,5,6-10,3} 中加和最大的子序列,这个例子的解很明显是{1,3,4,5,6}。 解决算法分析 -这个问题一看便有...

数据结构一:最大子序列和问题

在MOOC学习了C语言之后,深深觉得之前对C语言的理解以及使用都只是在隔靴搔痒,其中除了当时自己没有那么认真以外,老师的教学水平差距应该也是一个必不可少的差距。显然浙大老师的讲课方式以及经验和专业性都...

数据结构--最大子序列和(使用分治策略和递归)

例如对于输入:-2,11,-4,13,-5,-2答案为20   为方便起见 若所有整数为负数 则最大子序列和为0 算法一: 分治策略:其想法是把问题分成大致相等的子问题,然后递归的对他们求解,这是“...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【数据结构与算法分析】2.4 求最大子序列和
举报原因:
原因补充:

(最多只允许输入30个字)