一、最长递增子序列定义
以下是一个最长递增子序列的实例:
给定数组 [10, 22, 9, 33, 21, 50, 41, 60]
其最长递增子序列为 [10, 22, 33, 50, 60]
,长度为 5 。
或者 [10, 22, 33, 41, 60]
,也是一个长度为 5 的递增子序列。
二、用动态规划来处理的python代码:
def length_of_lis(nums):
if not nums:
return 0
dp = [1] * len(nums)
for i in range(1, len(nums)):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)
# 测试示例
nums = [10, 9, 2, 5, 3, 7, 101, 18]
print(length_of_lis(nums))
三、执行过程:
nums=[10,9,2,5,3,7,101,18]
dp=[1,1,1,1,1,1,1,1]
dp初值 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
i=1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
i=2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
i=3 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 |
i=4 | 1 | 1 | 1 | 2 | 2 | 1 | 1 | 1 |
i=5 | 1 | 1 | 1 | 2 | 2 | 3 | 1 | 1 |
i=6 | 1 | 1 | 1 | 2 | 2 | 3 | 4 | 1 |
i=7 | 1 | 1 | 1 | 2 | 2 | 3 | 4 | 4 |
最后输出为4,最长递增子序列为[2,3,7,101]或[2,5,7,18]