1、最长上升子序列
力扣链接
解题思路:动态规划
状态表示: dp[i]表示以nums[i]为结尾的最长上升序列的长度
转移方程: dp[i]=max(dp[j])+1 if nums[i]>nums[j]
初始化:dp[0]=1 ,初始化为1
返回值: max(dp)
注意是两重循环,时间复杂度为N*N
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
if not nums: return 0
dp=[1 for _ in range(len(nums))]
dp[0]=1
for i in range(1,len(nums)):
for j in range(0,i):
if nums[j]<nums[i]:
dp[i]=max(dp[i],dp[j]+1)
print(dp)
return max(dp)