https://zhuanlan.zhihu.com/p/46154210
1.题目描述
给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
2.题目分析
状态转移方程
一道很明显的动态规划问题,首先分析状态转移方程。位置i所组成的最长上升子序列长度为在它之前比它小的所有数字的最长上升子序列长度集合的最大值。
dp[i] = 1 + max(dp[n] 0 < n < i if nums[i] > nums[n])
初始条件
dp[0] = 1
第一个数字的最长上升子序列长度为1
代码
def length_of_lis():
box_num = int(input())
box_high = input().strip().split()
box_high = [int(i) for i in box_high]
print(box_high)
if box_num == 0:
return 0
if box_num == 1:
return 1
dp = [0]*box_num
dp[0] = 1
for i in range(1, box_num):
maxlen = 0
for j in range(i):
if box_high[i] > box_high[j]:
if maxlen < dp[j]:
maxlen = dp[j]
dp[i] = maxlen + 1
print(dp)
return max(dp)
版权声明:本文为TYUT_xiaoming原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。