📅  最后修改于: 2023-12-03 14:58:20.157000             🧑  作者: Mango
本题是门(GATE)计算机科学技术专业2018年的考题,题号为22。题目需要求解一个数据段中的最长下降子序列长度,其中一个子序列指的是不必连续的一组数,这组数的顺序需要和原数列中的顺序一致。 可以通过以下链接查看题目详细内容: 门| GATE CS 2018 |简体中文问题22
本题需要求解一个数据段的最长下降子序列长度,我们可以使用动态规划来解决这个问题。定义dp数组,dp[i]表示以第i个数为结尾的最长下降子序列长度。
转移方程为: dp[i]=max(dp[j])+1,其中0≤j<i,nums[j]>nums[i]
时间复杂度为O(n^2),空间复杂度为O(n)。其中n为数据段的长度。
def longest_decreasing_subsequence(nums):
n = len(nums)
dp = [1] * n
# 求解dp数组
for i in range(n):
for j in range(i):
if nums[j] > nums[i]:
dp[i] = max(dp[i], dp[j] + 1)
# 求解最长下降子序列长度
return max(dp)
nums = [1, 9, 7, 4, 5, 6]
print(longest_decreasing_subsequence(nums)) # 3