20180604 23:18
https://blog.csdn.net/joylnwang/article/details/6766317(写得很用心,膜拜dalao)
给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)
例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。
Input
第1行:1个数N,N为序列的长度(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9)
Output
输出最长递增子序列的长度。
Input示例
8
5
1
6
8
2
4
5
10
Output示例
5
思路:(upper_bound and lower_bound)https://blog.csdn.net/Quack_quack/article/details/48447293
⒈仿佛为我打开了新世界大门,首先,用常规方法做回超时,嗯...所以先一个一个读取数字,因为是求的最长上升子序列,所以用STL里面的upper_bound直接把比原先在数组里的数大的后输入的数的坐标(?)传输给L,最后L的长度就是要求的最长上升子序列的值。
ps:代码是由学长提供(https://www.cnblogs.com/hua-dong/p/9133827.html)
1 #include<cstdio> 2 #include<cstdlib> 3 #include<iostream> 4 #include<cstdio> 5 #include<cstdlib> 6 #include<iostream> 7 #include<algorithm> 8 #include<cstring> 9 #include<string> 10 #include<cmath> 11 using namespace std; 12 int a[100010]; 13 int main() 14 { 15 int n,x,i,L=0,pos=0; 16 scanf("%d",&n); 17 for(i=1;i<=n;i++){ 18 scanf("%d",&x); 19 pos=upper_bound(a+1,a+L+1,x)-a;//格式啊.注意事项1.下标都是下标. 20 a[pos]=x;// 2.把数放进去,然后判断:如果x比现有的数都大pos返回的是L+1; 21 L=max(L,pos);// 3.但是运行到一半发现找到组织了(及x此时不是这一波中最大的数)那么x被淘汰.数组依旧长度为L(这是上一把的长度). 22 } 23 cout<<L<<endl; 24 return 0; 25 }
给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的)
例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。
Input第1行:1个数N,N为序列的长度(2 <= N <= 50000)
第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= Si <= 10^9)Output输出最长递增子序列的长度。Sample Input
8 5 1 6 8 2 4 5 10
Sample Output
5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)