1. 动态规划,使用一个数组保存当前的最大递增子序列长度,时间复杂度为O(N^2)
# include# include # include using namespace std;int longestsub(int a[],int n){ int *dis=(int *)malloc((n+1)*sizeof(int)); dis[0]=1; int i,j; for(i=0;i =0;j--) { if(a[i]>a[j]&&dis[i]
2.《编程之美》上提供了第二种解法。使用数组b[len-1]表示长度为len时最后一个元素值,在这样的解法中能够使用二分查找使得程序加速,时间复杂度变为O(N*logN)
# include# include # include using namespace std;int binsearch(int a[],int n,int target) //binarysearch{int low=0;int high=n-1;int mid;while(low<=high){mid=(high-low)/2+low;if(a[mid]==target) return mid;else if(a[mid] b[len-1]) { b[len]=a[i]; len++; } else { int tmp=binsearch(a,n,a[i]); b[tmp]=a[i]; } } free(b); return len;}int main(){ int a[5]={7,6,8,4,1}; cout< <