首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >动态规划-300.最长递增子序列-力扣(LeetCode)

动态规划-300.最长递增子序列-力扣(LeetCode)

作者头像
白天的黑夜
发布2025-10-22 16:58:32
发布2025-10-22 16:58:32
1170
举报

一、题目解析

子数组vs子序列

回过头来,我们分析题目给出的条件,其中要注意的是严格递增这个字眼

二、算法原理

1、状态表示

我们想要知道的是最长递增子序列长度,所以dp[i]表示:以i位置元素为结尾的所有子序列中最长递增子序列的长度

2、状态转移方程

此时我们需要另一个变量j来表示j属于[0,i-1],在这个区间内找出以i位置为结尾的最长子序列

3、初始化

对表全部初始化为1,避免判断长度是否大于1

4、填表顺序

从左往右填表,保证所需值已被填写

5、返回值

由于dp表中记录的是[0,i]位置的最长子序列,所以只需要返回dp表中的最大值即可

来开启今日的编写代码之旅吧,链接:300. 最长递增子序列 - 力扣(LeetCode)

三、代码示例

代码语言:javascript
复制
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n = nums.size();
        vector<int> dp(n,1);
        for(int i = 1;i<n;i++)
        {
            for(int j = 0;j<=i-1;j++)
            {
                if(nums[j]<nums[i])
                {
                    dp[i]=max(dp[i],dp[j]+1);
                }
            }
        }
        int dp_max = dp[0];
        for(auto e : dp)
        {
            if(e>dp_max) dp_max = e;
        }
        return dp_max;
    }
};

看到最后,如果对您有所帮助,还请点赞、收藏和关注,点点关注不迷路,我们下期再见!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档