设计一个算法,找出一个由n个数 组成的序列的最长单调递增子序列的长度。
时间: 2023-12-18 07:19:39 浏览: 139
最长递增子序列的求法
5星 · 资源好评率100%
这个问题可以用动态规划算法求解。
我们可以用dp[i]表示以第i个数结尾的最长递增子序列的长度。初始化dp[i]为1,因为一个数本身也可以构成一个长度为1的递增子序列。
对于每个i,从1到i-1遍历,如果nums[i]大于nums[j],则说明nums[i]可以接在nums[j]后面,构成一个更长的递增子序列。此时更新dp[i],dp[i] = max(dp[i], dp[j]+1)。
最终的结果就是dp数组中的最大值,即最长递增子序列的长度。
下面是Python的实现代码:
```
def lengthOfLIS(nums):
if not nums:
return 0
n = len(nums)
dp = [1] * n
for i in range(1, n):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j]+1)
return max(dp)
```
时间复杂度为O(n^2),空间复杂度为O(n)。
阅读全文