leetcode hot100 300. 最长递增子序列 medium 动态规划


时间复杂度:O(n²)

空间复杂度:O(n)

dpi 表示 以 numsi 结尾的最长递增子序列长度

python 复制代码
class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:

        # 动态规划:时间复杂度:O(n²), 空间复杂度:O(n)

        # dp[i] 表示 以 nums[i] 结尾的最长递增子序列长度
        # 对于每个 i,遍历 j = 0..i-1:
        #     如果 nums[i] > nums[j] → 可以接在 nums[j] 后面
        #     更新 dp[i] = max(dp[i], dp[j]+1)

        n = len(nums)
        dp = [1] * n  # nums中每个位置的最长子序列长度,初始值为1: dp = [1,1,1,...]

        for i in range(n):
            # 遍历i前面的数字,更新i是否可以作为对应数字,对应最长子序列的下一个,可以:i位置的最长子数组长度+1
            for j in range(i):
                if nums[i] > nums[j]:
                    dp[i] = max(dp[i], dp[j]+1)

        return max(dp)
相关推荐
夏幻灵11 小时前
LeetCode 21:合并两个有序链表——双指针与哑节点详解
算法·leetcode·链表
Navigator_Z13 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
圣保罗的大教堂14 小时前
leetcode 301. 删除无效的括号 困难
leetcode
夏幻灵16 小时前
每日一题:LeetCode 206:反转链表——三指针与原地反转详解
算法·leetcode·链表
-dzk-17 小时前
【多维动态规划】LC 64.最小路径和
算法·动态规划
Tisfy19 小时前
LeetCode 0301.删除无效的括号:二进制枚举 / 回溯
算法·leetcode·字符串·题解·回溯·括号匹配·二进制枚举
Nil20819 小时前
leetcode 322零钱兑换
算法·leetcode·职场和发展
yi01119 小时前
DAY24: LeetCode 167:两数之和 II|从暴力枚举到左右双指针
笔记·python·算法·leetcode·二分查找·双指针
木井巳19 小时前
【BFS 解决拓扑排序】课程表
java·算法·leetcode·广度优先·宽度优先·推荐算法·图搜索算法
Logic10120 小时前
C语言/数据结构数位DP题解:平滑排列数字统计——区间内相邻位差不超过K的数字个数
c语言·数据结构·动态规划·时间复杂度·数位dp·算法题·前导零处理