首页 > 代码库 > O(nlogn)算法,最长上升子序列,,非动规
O(nlogn)算法,最长上升子序列,,非动规
//最长上升子序列最快算法,非动态规划,运用了二分思想,还有栈的思想, //用每一个数去和栈中的栈顶元素相比较,如果大于栈顶元素,则入栈,否则运用二分查找,寻找出第一个比这个数大的那个数替换 #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<cstdlib> #include<cmath> using namespace std; int main() { int temp, tail; int n; int stack[1001]; scanf("%d", &n); tail = 0; stack[0] = -1; for (int i = 1; i <= n; i++) { scanf("%d", &temp); if (temp > stack[tail]) stack[++tail] = temp;//入栈 else { int l = 1, r = tail; int mid; while (l <= r)//二分 { mid = (l + r) / 2; if (temp > stack[mid]) l = mid + 1; else r = mid - 1; } stack[l] = temp; } } printf("%d", tail); return 0; }
O(nlogn)算法,最长上升子序列,,非动规
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。