最长上升子序列LIS
2016-07-13 20:50
351 查看
给定一列数,求最长上升子序列的长度。
O(n^2)的算法大家都会吧。这里介绍一种时间复杂度较低的算法(我也不会算时间复杂度,反正很低)。
我们可以维护一个单调。。。数组吧。若这个数比数组最后一个数大,将它加入数组,长度++;
else替换最早比它大的数。。
讲解就完了,上代码:
O(n^2)的算法大家都会吧。这里介绍一种时间复杂度较低的算法(我也不会算时间复杂度,反正很低)。
我们可以维护一个单调。。。数组吧。若这个数比数组最后一个数大,将它加入数组,长度++;
else替换最早比它大的数。。
讲解就完了,上代码:
#include<algorithm> #include<iostream> #include<cstdio> using namespace std; int n,m,a[1005],b[1005]; int bin(int x) { int l=1,r=m; while(l<r) { int mid=(l+r)/2; if(x<=b[mid]) r=mid; else l=mid+1; } return l; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",a+i); for(int i=1;i<=n;i++) { if(a[i]>b[m]) b[++m]=a[i]; else { int pos=bin(a[i]); b[pos]=a[i]; } } printf("%d\n",m); return 0; }
相关文章推荐
- linux③
- xcconfig配置的关系
- 遍历文件夹下所有文件
- 现在云战争(真的)开始了
- win7(64)+vs2013+opencv3.0配置的辛酸路程
- LUA学习笔记(第1-4章)
- POST请求调试
- iOS网络请求参数以JSON的格式上传
- python爬虫编写
- 将Unity3D导出的项目集成到iOS主程序中
- linux下使用crontab设置scrapy爬虫定时抓取数据
- java生成任意随机值,字符,数字,其它的都有你来
- Eclipse调试按钮消失问题
- java内部类与抽象类
- Android NFC相关资料之MifareClassic卡(读写)
- PAT 天梯赛练习题 L1-020 帅到没朋友
- JAVA之反射
- html5-拖放
- LeetCode - 40. Combination Sum II
- Android图片的三级缓存