当前位置:网站首页>【LeetCode】300.最长上升子序列

【LeetCode】300.最长上升子序列

2022-06-12 22:17:00 LawsonAbs

1.题目

2.思想

dp题

  • 状态:设 dp[i] 表示以 nums[i] 为 结尾得到的最大的上升子序列长度
  • 策略:如何得到状态转移公式?
    dp[i] 会 依赖i前的所有数j,其中 j < i j<i j<i,递推式便是
    d p [ i ] = d p [ j ] + 1 ,   i f   n u m [ i ] > n u m [ j ] dp[i] = dp[j] + 1,\ if \ num[i] > num[j] dp[i]=dp[j]+1, if num[i]>num[j]
    不断更新取最大就行了

3.代码

class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        dp = [1] * len(nums) # 自身都是1 
        # s 表示的是区间长度 
        for i in range(0,len(nums)):
            for j in range(0,i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[j]+1,dp[i])
        res = dp[0]
        for i in range(len(nums)):
            res = max(res,dp[i])
        return res
原网站

版权声明
本文为[LawsonAbs]所创,转载请带上原文链接,感谢
https://lawson-t.blog.csdn.net/article/details/125235409