思路:
明显的动态规划题,d[i]表示以num[i]结尾的最长严格递增子序列的长度。
第一个循环依次遍历d[i]并计算,第二个循环旨在更新d[i]的值,因为num[i]之前可能存在某个num[j]比他小,并且d[j]+1大于d[i]
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
d = [1]*len(nums)
for i in range(len(nums)):
for j in range(i):
if nums[j] < nums[i]:
d[i] = max(d[i], d[j]+1)
return max(d)