将求最长子序列的算法由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
- 将求最长子序列的算法由O(n²)改进为O(n).
- 最长上升子序列、最长下降子序列的DP算法由O(n^2)到O(nlogn)算法
- 最长上升子序列 o(n*logn)算法
- 最长连续序列(O(n)算法)
- 最长递增子序列的求解(O(n*n),O(nlogn))——动态规划
- 最长不下降子序列的O(n*logn)算法
- 最长不下降子序列的O(n)算法
- 算法导论15.4-6 求一个n个数的序列的最长单调递增子序列 O(n*logn)
- 最长单调子序列(O(n^2) 和 O(nlogn) 算法)
- 【LIS最长上升子序列】O(n^2)与O(nlogn)算法(HDU1257)
- 最长上升子序列、最长下降子序列的DP算法由O(n^2)到O(nlogn)算法实现及其优化
- O(nlog(n))的最长上升(不下降)子序列算法
- 最长公共上升子序列(LCIS)的O(n^2)算法
- 最长公共上升子序列(LCIS)的O(n^2)算法
- 最长公共上升子序列(LCIS)的O(n^2)算法
- 杭电1257(最长递增子序列O(N*N)+O(N*logN))
- O(n)的方法求最长回文子串长度(Manacher算法)
- 求字符串的最长回文子串(manacher算法O(n)时间)
- 第87讲:Scala中使用For表达式做查询
- 【java】itoo项目实战之EJB中的RMI框架
- jquery ajax 解决跨域访问问题
- Go语言中的单元测试及反向代理
- 选择排序----数组实现
- 将求最长子序列的算法由O(n²)改进为O(n).
- SQL 获取连续编号中断号的最小值
- 部分真题整理4
- Go语言中使用panic和recover简化错误处理
- JSTL标签(可以直接在jsp页面格式化)
- 支持向量机之线性支持向量机(三)
- 容器 Collection和Map
- 黑马程序员-java-反射
- linux下好用的文本编辑器nano