欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

最长上升子序列长度(C++二分查找)

时间:2023-06-06

#includeusing namespace std;int a[100];int b[100];//b中存储的不是最长上升子序列 int len = 1;//字符串长度为1时 最长上升子序列长度为1 //二分查找 int bs(int x){int l = 1,r = len;int mid;//返回第一个大于或等于x的元素的下标 while(l <= r){mid = l+(r-l)/2;if(x > b[mid]) l = mid + 1;else r = mid - 1;}return l;}int main(){int n,j;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];b[1] = a[1];for(int i=2;i<=n;i++){if(a[i] > b[len])b[++len] = a[i];else{//不断更新得到可以得到的最大的len长度 j = bs(a[i]);b[j] = a[i];}}printf("%d",len);return 0;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。