LeetCode 300. Longest Increasing Subsequence

博客围绕求最长上升子序列(不要求连续)展开。采用动态规划思路,状态为取第i个元素时最长上升子序列长度,状态转移通过两重循环遍历数组及当前元素前的dp值,初始化为1,最终返回所有dp值里的最大值,并给出了相应代码。

题目

求最长上升子序列(不要求连续)

思路

动态规划
状态:
取第 i 个元素的条件下,得到的最长上升子序列长度

状态转移:
dp[i] = max(dp[0]…dp[j]…dp[i-1]) + 1 且满足 nums[j] < nums[i]

两重循环,遍历数组,遍历当前元素之前的所有dp值
初始化为1,因为如果是递减序列,结果是1
返回值是所有dp值里最大的
在这里插入图片描述

代码

class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        if nums == []:
            return 0
        memo = [1]*len(nums)
        for i,n in enumerate(nums):
            for j in range(i):
                if nums[j] < n:
                    memo[i] = max(memo[i], 1+memo[j])
        return max(memo)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值