将求最长子序列的算法由O(n²)改进为O(n).

来源:互联网 发布:python使用指南 下载 编辑:程序博客网 时间:2024/06/04 18:36

在一片博文看见如下求最长增长子序列的算法如下复杂度为O(n²):

#include <iostream>using namespace std;int lis(int A[], int n){    int *d = new int[n];    int len = 1;    for(int i=0; i<n; ++i){        d[i] = 1;        for(int j=0; j<i; ++j)            if(A[j]<=A[i] && d[j]+1>d[i])                d[i] = d[j] + 1;        if(d[i]>len) len = d[i];    }    delete[] d;    return len;}int main(){    int A[] = {        5, 3, 4, 8, 6, 7    };    cout<<lis(A, 6)<<endl;    return 0;}



偶然看完编程珠玑第八章后,深受启发,改进后的代码如下(复杂度为O(n))大笑

#include<iostream>using namespace std;int a[10001];int max(int a,int b){return a>b?a:b;}int main(){int T;cin>>T;while(T--){int N;cin>>N;for(int i=0;i<N;i++)cin>>a[i];int maxsofar=0;int maxendinghere=1;for(int i=1;i<N;i++){maxendinghere=a[i]>a[i-1]?maxendinghere+1:1;  maxsofar=max(maxsofar,maxendinghere);}cout<<maxsofar<<endl;}} 

第一次写文章,如有不足,请多指教委屈

0 0