思路:动态规划
dp[i]
定义为,到第i
个位置为止的,最长递增子序列,每遍历到一个i
,就用j
从0
遍历到i-1
,选出每个比i
小的j
,即当前数i
可以接在前面哪个序列的尾巴上,计算最大长度
初始:dp都为1,每个数都是一个子序列
转移方程: dp[i] = max(dp[i], dp[j] + 1) for j in [0, i)
答案:max(dp)
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
if not nums:
return 0
dp = [1] * len(nums)
for i in range(len(nums)):
for j in range(i):
# 如果要求非严格递增,将此行 '<' 改为 '<=' 即可。
if nums[j] < nums[i]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)