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

法一:递归

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;
    }
};
相关推荐
啦啦啦啦啦zzzz2 小时前
算法:贪心算法
c++·算法·leetcode·贪心算法
清泓y3 小时前
RAG 技术
算法·ai
阿慧今天瘦了嘛3 小时前
计算机组成原理概述:从硬件到软件的桥梁
计算机网络·算法
网站优化(SEO)专家4 小时前
SEO核心算法拆解:网站排名快速提升的武林秘籍!
算法·搜索引擎·网站排名·核心算法
惊讶的猫4 小时前
CLGSI
人工智能·算法·机器学习
ysa0510305 小时前
【板子】二分答案(最大最小?)
c++·笔记·算法·板子
科技之门5 小时前
百公里管网漏损分级定位实战方案2026
前端·人工智能·算法
木木子226 小时前
# 猜数字游戏 — HarmonyOS交互逻辑与随机算法实现
算法·游戏·华为·交互·harmonyos
stolentime6 小时前
SP8549 MAIN75 - BST again题解
c++·算法·二叉树·深度优先·图论·记忆化搜索·组合数学