| 最长递增子序列 | ||||||
| ||||||
| Description | ||||||
|
给出一个数字序列求其最长的递增子序列例如序列(1,7,3,5,9,4,8). (1,7)和(3,4,8)是其递增子序列但其最长的递增子序列是(1,3,5,8)。
| ||||||
| Input | ||||||
|
本题有多组测试数据,对于每组测试数据第一行是一个整数n(n<=100)代表序列长度。 第二行是n个整数。 | ||||||
| Output | ||||||
| 最长递增子序列长度 | ||||||
| Sample Input | ||||||
|
7 1 7 3 5 9 4 8 | ||||||
| Sample Output | ||||||
| 4 |
对于这个题目,我只能说是水题。但是有点坑!!
我使用了两种方法解决这个题目 :
1.DP
2.二分法
我一开始也不知道还能使用二分法,但是通过后面学习和细心被别人指导,发现这个可以使用二分法的
对于DP的解决是,
dp[i] = MAX(dp[i],dp[j]+1) 前提条件是 arr[i] > arr[j]
代码如下:
后来我花了点时间,在使用二分法解决这个问题 :
二分法的思想就是在插入的时候要使用二分查找,看能插入到哪里,时间复杂度为 o(nlog(n))
时间也很小了
代码如下 :
由于二分法是我想出来的,所以我没有进行过特别变态的数据,以后我要是能发现比我这个还要好的,我就把他的那个学习一下。
本文详细介绍了如何解决最长递增子序列问题,包括动态规划和二分法两种方法,提供了具体代码实现和时间复杂度分析。


226

被折叠的 条评论
为什么被折叠?



