300. 最长上升子序列

该博客详细介绍了如何使用动态规划算法求解最长递增子序列(Longest Increasing Subsequence, LIS)的问题,给出了Python实现。时间复杂度为O(n^2),空间复杂度为O(n)。博客通过循环遍历和嵌套循环实现dp数组更新,逐步找到最长递增子序列的长度。
摘要由CSDN通过智能技术生成
class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        if not nums:
            return 0
        else:
            dp = [1 for _ in range(len(nums))]
            for l in range(len(nums)):
                for i in range(l):
                    if nums[i] < nums[l]:
                        dp[l] = max(dp[l], dp[i]+1)
            return max(dp)

时间复杂度O(n^2) 循环遍历嵌套
空间复杂度O(n) dp的长度

将原数组拆分成多个子数组,原数组长度为n就拆分成n个子数组长度分别是0,1,……n,在得知第n-1子数组的解的情况下,就可以求出n子数组的解。

解 f(n) = max( f(n-1), f(n)+1) 当 nums(i) > nums(n) ( i < n )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值