【算法】最长递增子序列(三种解法)

法一:递归

cpp 复制代码
class Solution {

public:
    int lengthOfLIS(vector<int>& nums) 
    {
        int ret=0;
        for(int i=0;i<nums.size();i++)
        {
            int len=dfs(nums,i);
            ret=max(ret,len);
        }
        return ret;
    }
    int dfs(vector<int>& nums,int pos)
    {
        int ret=1;
        for(int i=pos+1;i<nums.size();i++)
        {
            if(nums[i]>nums[pos])
            {
                ret=max(ret,1+dfs(nums,i));
            }
        }
        return ret;
    }
};

此方法时间复杂度过于大,所以会超出时间限制,在此基础上可用记忆化搜索进行优化。

法二:记忆化搜索

cpp 复制代码
class Solution {

public:
    int lengthOfLIS(vector<int>& nums) 
    {
        int n=nums.size();
        vector<int> memo(n,0);
        int ret=0;
        for(int i=0;i<nums.size();i++)
        {
            int len=dfs(nums,i,memo);
            ret=max(ret,len);
        }
        return ret;
    }
    int dfs(vector<int>& nums,int pos,vector<int>& memo)
    {
        if(memo[pos])
        {
            return memo[pos];
        }
        int ret=1;
        for(int i=pos+1;i<nums.size();i++)
        {
            if(nums[i]>nums[pos])
            {
                ret=max(ret,1+dfs(nums,i,memo));
            }
        }
        memo[pos]=ret;
        return ret;
    }
};

法三:动态规划

cpp 复制代码
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) 
    {
        int n=nums.size();
        int ret=0;
        vector<int> dp(n,1);
        for(int i=n-1;i>=0;i--)
        {
            for(int j=i+1;j<n;j++)
            {
                if(nums[j]>nums[i])
                {
                    dp[i]=max(dp[i],dp[j]+1);
                }
            }
            ret=max(ret,dp[i]);
        }    
        return ret;
    }
};
相关推荐
青 春 记 忆42 分钟前
LeetCode 350. 两个数组的交集 II|Python 解法详解
python·算法·leetcode
阳明山水1 小时前
销量预测2025—2026:从模型竞赛到系统融合的范式转型
人工智能·深度学习·算法·机器学习·架构
桐盛科技2 小时前
拒绝“漂绿”风险:基于边缘计算的碳排放数据清洗算法与实时校验逻辑
人工智能·算法·边缘计算
Tongzhi20262 小时前
通芝科技考勤软件三大发展趋势:AI大模型、无感识别与数据底座
大数据·科技·算法·爬山算法
eBest数字化转型方案2 小时前
Route Optimization for FMCG:多目标排线算法的工程实现
大数据·人工智能·算法
residual_fan3 小时前
持续对比强化学习(Continual Contrastive Reinforcement Learning)论文分享
人工智能·算法·数据挖掘·数据分析
s_w.h3 小时前
【 计网 】序列化与反序列化
linux·服务器·网络·算法·bash
信奥卷王4 小时前
2025年09月GESPC++五级真题解析(含视频)
算法
白狐_7984 小时前
408 数据结构|外部排序:流程与 k 路归并
数据结构·算法
闻缺陷则喜何志丹4 小时前
【动态规划】P3609 [USACO17JAN] Hoof, Paper, Scissor G
c++·算法·动态规划·洛谷