查询序列中的最长递增子序列的长度
2012-07-09 21:51
204 查看
int FindMaxSS(int* list, int n) { if( 0 >= n) { return 0; } if( 1 == n) { return 1; } int * maxv = new int ; int* maxL = new int ; for(int i = 0;i<n; ++i) { maxv[i] = 0; maxL[i] = 1; } maxv[0] = list[0]; int maxvalue =1; int m = 0; for(int i =1; i < n; ++i) { for(int j = 0; j < i; ++j) { if(maxv[j] < list[i]) { maxv[j] = list[i]; maxL[j]++; if(maxL[j] > maxvalue ) { maxvalue = maxL[j]; } } } } delete [] maxv; maxv =NULL; delete [] maxL; maxL = NULL; return maxvalue; }
第二种方法
int FindMaxSSEx(int* list, int n) { if( 0 >= n) { return 0; } if( 1 == n) { return 1; } int * maxv = new int ; int* maxL = new int ; for(int i = 0;i<n; ++i) { maxv[i] = 0; maxL[i] = 0; } maxv[0] = list[0]; maxL[0] = 1; int m = 0; for(int i = 1; i < n; ++i) { for(int j = m; j >= 0; --j) { if(maxv[j] <= list[i]) { if(maxL[j + 1] == 0) { m = j+1; maxL[j + 1] = 1; maxv[j + 1] = list[i]; } else if(maxv[j + 1] > list[i]) { maxv[j + 1] = list[i]; } } } if(maxv[0] > list[i]) { maxv[0] = list[i]; } } delete [] maxv; maxv =NULL; delete [] maxL; maxL = NULL; return m + 1; }
相关文章推荐
- 最长递增子序列(输出最长递增序列 及其长度)
- 最长递增子序列的长度
- 动态规划求解最长递增子序列的长度
- 求整数数组中的最长递增子序列长度
- 求最长递增子序列的长度
- 求解最长递增子序列的长度
- 序列的最长递增子序列长度 with matlab
- 最长递增子序列长度+最长公共子序列
- 最长递增子序列长度问题
- 求解最长递增子序列长度|动态规划+二分查找:C\C++实现
- NYOJ 236 心急的C小加(最长递增子序列长度)
- C++计算整数序列的最长递增子序列的长度
- 最长递增子序列长度(动态规划)
- 生成最长递增子序列
- 最长递增子序列 O(NlogN)算法
- 最长递增子序列 (Longest Increasing Subsequence)
- 生信脚本练习(12)求fasta文件各序列长度并统计作图
- HDU-1257 最少拦截系统 贪心/DP 最长上升子序列的长度==最长不上升子序列的个数?
- 最长递增子序列(LIS)
- 【日常学习】【二分】【最长不下降子序列长度】codevs4214 [Mz]品尝美食题解