可以使用递归的方法解决该问题。具体思路如下:
1.定义一个函数LIS(start, last),其中start表示子序列的起始位置,last表示上一个数的下标。 2.如果start等于序列长度,返回0。 3.对于当前位置i(i从start到序列长度-1),如果当前数大于上一个数,则返回1+LIS(i+1, i)。 4.如果当前数小于等于上一个数,则返回LIS(i+1, last)。
最终的代码如下所示:
int LIS(int start, int last) { if (start == n) return 0; int maxLIS = 0; for (int i = start; i < n; i++) { if (a[i] > a[last]) maxLIS = max(maxLIS, 1 + LIS(i+1, i)); else maxLIS = max(maxLIS, LIS(i+1, last)); } return maxLIS; }
其中n表示序列长度,a数组存储序列中的数字。调用该函数时,传入参数LIS(0, -1)即可得到最长递增子序列的长度。
上一篇:不使用数学库的情况下计算e^x
下一篇:不使用数组存储多个双精度数