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

法一:递归

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;
    }
};
相关推荐
LMT_Lanmantech3 分钟前
HyperWorks许可:almutil显示Unit满了,数据到底准不准?
运维·服务器·算法
禁默13 分钟前
论文解读与思考:基于场所地图的标识感知机器人探索方法及工程参考的价值
人工智能·深度学习·算法·机器人
维克兜率天14 分钟前
【维克】统计套利建模:从因子到信号的完整流程
android·开发语言·python·算法·kotlin
Zentceh20 分钟前
PixelClean 这类 AI 降噪算法是怎么工作的?从 RAW 域到 GAN 色彩重建的技术拆解
图像处理·人工智能·科技·算法·计算机视觉·车载系统·智能硬件
用户03906147071925 分钟前
无感观测器理论模型(NTSM-SMO-PLL 与 SMO-PLL)
算法
垆边人似月.36 分钟前
找出最小的 K 个数
数据结构·c++·算法
熊猫钓鱼>_>42 分钟前
当工具成为类:Softmax困境与连接器过载的算法根源
算法·ai·agent·工具·曲线·华为云码道·生态图鉴
信奥卷王1 小时前
[GESP202503 六级] 树上漫步(含视频)
算法
Purple Coder1 小时前
南京-我来啦
算法
w_zero_one1 小时前
动态规划(三)
java·算法·动态规划