编程之美 求数组中的最长递增子序列
2013-07-22 19:54
225 查看
如题,例如:存在数组 1,-1,2,-3,4,-5,6,-7 ,则最长的递增子序列是:1,2,4,6.
法一:
蛮力法
复杂度为O(N^2);
法二:
利用DP来做,最有问题,一般都用dp来做,关键是找到递归公式。
用LIS[i]记录位置i处,最长的递增子序列,编程之美上的解法,真心看不懂,记录下来,以后再看:
法三:先对数组排序,然后找出原数组和排序后数组的LCS,就是我们要找的最长递增子序列。
法一:
蛮力法
int Lis(int* arr,int n) { int iCount=0;//记录子序列的个数 int tmp_count=0; int tmp; for(int i=0;i<n-1;i++) { tmp=arr[i]; for(int j=i+1;j<n-1;j++) { if(arr[j]>tmp) { iCount++; tmp=arr[j]; } } if(iCount>tmp_count) { tmp_count=iCount; } iCount=0; } return tmp_count+1; }
复杂度为O(N^2);
法二:
利用DP来做,最有问题,一般都用dp来做,关键是找到递归公式。
用LIS[i]记录位置i处,最长的递增子序列,编程之美上的解法,真心看不懂,记录下来,以后再看:
int LIS(int[] array) { int[] LIS=new int[array.Length]; for (int i = 0; i < array.Length; i++) { LIS[i] = 1; for (int j = 0; j < i; j++) { if (array[i] > array[j] && LIS[j] + 1 > LIS[i]) LIS[i] = LIS[j] + 1; } } } return Max(LIS); }
法三:先对数组排序,然后找出原数组和排序后数组的LCS,就是我们要找的最长递增子序列。
相关文章推荐
- 求数组中的最长递增子序列(编程之美2.16)
- 最长递增子序列(编程之美)
- 算法 数组中的最长递增子序列
- 哈理工1116选美大赛(最长递增子序列)(对dp数组内数据的理解)
- 求一个数组的最长递增子序列(动态规划经典问题)
- 最长递增子序列(编程之美2.16)
- 编程之美--数组中的最长递增子序列(LIS longest increasement sequence)
- 求整数数组中的最长递增子序列长度
- 求数组中的最长递增子序列
- 编程之美 set 7 求数组中的最长递增子序列
- Codeforces Round #261 (Div. 2)(树状数组,dp,dfs构造序列)
- 编程之美2.14 子数组之和的最大值 扩展问题(首尾相连)
- 编程之美(2.14)——求数组的子数组之和最大值
- 编程之美之2.14 求数组的子数组之和的最大值
- numpy: 新建二维序列数组
- 数组-10. 求整数序列中出现次数最多的数(15)
- 编程之美2.18--数组分割(动态规划问题)
- 找出数组中最长的连续数字序列(JavaScript实现)
- 最长递增子序列问题的求解
- 最长递增子序列(LCS)