时间复杂度

来源:互联网 发布:three.js webgl 编辑:程序博客网 时间:2024/06/04 00:32

    最近在跟数据结构的课程,发现了这道题从n^3刷到n^2最后刷到n,觉得对于理解算法的时间复杂度比较有帮助,于是记录下来,以便以后查看。

给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。

输入格式:

输入第1行给出正整数 K (<= 100000);第2行给出K个整数,其间以空格分隔。

输出格式:

在一行中输出最大子列和。如果序列中所有整数皆为负数,则输出0。

输入样例:
6-2 11 -4 13 -5 -2
输出样例:
20
算法一:时间复杂度为n^3;

#include <stdio.h>int MaxSubseqSuml(int A[],int N);int main(){    int n,i,Max;    int a[100000];    scanf("%d",&n);    for(i=0;i<n;i++){        scanf("%d",&a[i]);    }    Max=MaxSubseqSuml(a,n);    printf("%d",Max);return 0;}int MaxSubseqSuml(int A[],int N){    int ThisSum,MaxSum=0;    int i,j,k;    for(i=0;i<N;i++){            for(j=i;j<N;j++){                    ThisSum=0;                    for(k=i;k<=j;k++){                        ThisSum+=A[k];                    }                    if(ThisSum>MaxSum){                        MaxSum=ThisSum;                    }            }    }    return MaxSum;

}

算法二:时间复杂度 n^2;

#include <stdio.h>int MaxSubseqSuml(int A[],int N);int main(){    int n,i,Max;    int a[100000];    scanf("%d",&n);    for(i=0;i<n;i++){        scanf("%d",&a[i]);    }    Max=MaxSubseqSuml(a,n);    printf("%d",Max);    return 0;}int MaxSubseqSuml(int A[],int N){    int ThisSum,MaxSum=0;    int i,j;    for(i=0;i<N;i++){            ThisSum=0;            for(j=i;j<N;j++){                        ThisSum+=A[j];                    if(ThisSum>MaxSum){                        MaxSum=ThisSum;                    }            }    }    return MaxSum;}

算法三:时间复杂度为n;

#include <stdio.h>int MaxSubseqSuml(int A[],int N);int main(){    int n,i,Max;    int a[100000];    scanf("%d",&n);    for(i=0;i<n;i++){        scanf("%d",&a[i]);    }    Max=MaxSubseqSuml(a,n);    printf("%d",Max);    return 0;}int MaxSubseqSuml(int A[],int N){    int ThisSum,MaxSum=0;    int i;    ThisSum=MaxSum=0;    for(i=0;i<N;i++){        ThisSum+=A[j];        if(ThisSum>MaxSum){            MaxSum=ThisSum;        }                }    return MaxSum;}

                                             
0 0