最长递增子序列(时间复杂度n*logn)
2013-03-26 15:18
141 查看
利用二分的思想将时间复杂度降到了n*logn,很好~
代码实现:
代码实现:
#include<stdio.h>//时间复杂度为(n*logn) #include<string.h> int a[5001],dp[5001]; int main() { int i,n,len,m,r,p; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); dp[0]=-1000000; dp[1]=a[0]; len=1; for(i=1;i<n;i++) { p=0;r=len; while(p<=r)//二分查找 { m=(p+r)/2; if(a[i]>dp[m]) p=m+1; else r=m-1; } dp[p]=a[i]; if(p>len)//长度增加了1 len++; } printf("%d\n",len); } return 0; }
相关文章推荐
- zoj1986,poj1631,最长上升子序列,复杂度O(n*logn)
- 在旋转后的有序数组中查找元素,要求O(logn)的时间复杂度
- 数组连续子序列的最大的和;四种算法,四种时间复杂度
- n个无序整数,已知第i个数在排好序的序列中的位置为j,满足|i-j|<=K,请设计一种排序算法,对该序列进行排序。注:算法时间复杂度为O(nlgn)的得0分,复杂度为O(nk) 的得两分,总分是20分
- 二分搜索的时间复杂度O(logN)如何得到
- 各种排序算法时间复杂度、稳定性、初始序列是否对元素比较次数有关
- O(logn)时间复杂度求Fibonacci数列
- 算法的时间复杂度O(logN)底数
- logn 时间复杂度 计算整数 末尾0的个数
- 求最大子序列的线性时间复杂度的解法的理解
- 二分搜索的时间复杂度O(logN)
- 几个时间复杂度O(logN)的算法
- 给一个由n-1个整数组成的未排序的序列,其元素都是1~n中的不同的整数。如何在线性时间复杂度内寻找序列中缺失的整数
- 算法_动态规划_最长单调递增子序列问题(O(nlogn)的时间复杂度)
- 最长递增子序列问题,O(N*logN)实现
- O(logn)时间复杂度求Fibonacci数列
- 用分治法求最大子序列问题,时间复杂度O(N*logN)
- 最大子序列的3种不同时间复杂度的算法
- 最坏情况下保证时间复杂度为N*logN的快速排序
- O(logn)时间复杂度求Fibonacci数列