Leetcode300. Longest Increasing Subsequence-动态规划

Leetcode300. Longest Increasing Subsequence

题目

题目链接

思路

在当前位置上,回头看前边比它小的元素的最长序列有多长
官方题解有动画演示
这是动态规划解法,还可以用二分法继续降低复杂度,同样见官方题解

复杂度

官方分析

  • 时间复杂度 O ( N 2 ) \mathcal{O}(N^2) O(N2)
    两层循环
    每个位置需要回头看一遍前面的DP元素和Array元素

  • 空间复杂度 O ( N ) \mathcal{O}(N) O(N)
    新建DP数组

代码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值