DP的含义是截止i位置,有最长的increase subarray的长度。两个循环,每次增加新的位置i,再遍历0到i位置,比i位置小的数字都可能成为新的longest increase subarray的倒数第二个数字,新的i位置数字成为最后一个,则满足num[j] < num[i]的情况下,res[i] = max(res[i], res[j] + 1)。
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
if not nums:return 0
res = [1 for _ in range(len(nums))]
for i in range(1, len(nums)):
for j in range(i):
if nums[i] > nums[j]:
res[i] = max(res[i], res[j]+1)
return max(res)