📅  最后修改于: 2023-12-03 15:21:30.809000             🧑  作者: Mango
在一些算法问题中,需要寻找一个最长递增子序列。但是在有些情况下,需要寻找的递增子序列不能包含给定的某些数字。下面介绍一种算法,用于寻找不包含给定序列的最长递增子序列的长度。
以下是算法的Python代码实现:
def longest_increasing_subsequence(nums, exclude):
n = len(nums)
dp = [1]*n
for i in range(1, n):
for j in range(i):
if nums[i] > nums[j] and nums[i] not in exclude:
dp[i] = max(dp[i], dp[j]+1)
return max(dp)
# 示例
nums = [1, 2, 3, 4, 5, 6, 7]
exclude = [3, 5]
print(longest_increasing_subsequence(nums, exclude)) # output: 5
由于算法使用了两重循环,因此时间复杂度为O(n^2)。
使用了长度为n的dp数组,因此空间复杂度为O(n)。