左老师-最长递增子序列
来源:互联网 发布:淘宝虚拟店铺货源 编辑:程序博客网 时间:2024/06/11 12:06
#include<iostream>#include<string>#include <vector>using namespace std;//最长递增子序列长度int maxlen(int *arr,int len){int b[100]={0};//当必须以arr[i]为结尾的前提下,最长递增长度为h[i] int max=1;for(int i=0;i<8;i++){ b[i]=1; for(int j=i-1;j>=0;j--) { if(arr[i]>arr[j]) {if(max<(b[i]+b[j])) max=b[i]+b[j]; } } if(b[i]!=max) b[i]=max; max=0;}max=b[0];for(int i=1;i<8;i++){ if(b[i]>max) max=b[i];}return max;}int maxlen2(int *arr,int len)<span style="font-family: Arial, Helvetica, sans-serif;">//这个方法是nlog(n)在查找的时候是二分查找,h[i]有效区表示遍历到当前时刻为止长度为i+1的最小末尾是多少</span>{int cur=arr[0];vector<int>h(len,0);int max=0;int right=0;for(int i=0;i<len;i++){int l=0;int r=right;while(l<=r){ int m=(l+r)/2; if(arr[i]>h[m]) l=m+1; else r=m-1;} int j=l>r?l:r; h[j]=arr[i]; right=right>j?right:j;}return right;}int main(){ int len; int arr[8]; cin>>len; for(int i=0;i<8;i++) { cin>>arr[i]; } cout<<maxlen2(arr,len)<<endl;return 0;}第一种方法时间复杂度O(N2)
</pre><pre>
第二种方法时间复杂度O(NlogN)
h[ ]变化过程2 1 6 4 5 2 7 4
2
1
1 6
1 4
1 4 5
1 2 5
1 2 5 7
1 2 4 7
0 0
- 左老师-最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- android Thread HandlerThread Looper Message MessageQueue Handler的关系
- SSH框架搭建流程
- 《多线程——GCD》
- Jenkins异常处理
- Android Sources for android api 24 not found 错误解决!
- 左老师-最长递增子序列
- liunx c实现http多线程下载1(总体流程)
- 在Iframe页面中使用jQuery控制parent页面
- js设置Select按文本或按值选中
- weakself的一种写法
- Collections的sort用法
- Android 数据库 增删改查
- centos6.5环境通过rpm包安装mysql5.5.51数据库
- SVG