最长递增子序列

问题描述与解题思路

题目链接
在这里插入图片描述

确定本题的状态表示

dp[i]的含义是以nums[i]为结尾的最长递增子序列的长度

确定本题的状态转移方程

for(int j=0;j<i;j++){
    if(nums[i]>nums[j])
        dp[i]=max(dp[i],dp[j]+1);
}

填表求值

根据初始条件和状态转移方程,确定填表顺序,进而逐步填满dp表,最终返回题目要的结果

代码实现

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n=nums.size();
        vector<int> dp(n,1);
        int ret=1;
        //dp[i]的含义是以nums[i]为结尾的最长递增子序列的长度
        for(int i=1;i<n;i++){
            for(int j=0;j<i;j++){
                if(nums[i]>nums[j])
                    dp[i]=max(dp[i],dp[j]+1);
            }
            ret=max(ret,dp[i]);
        }
        return ret;
    }
};
posted @ 2025-09-26 16:14  烧冻鸡翅QAQ  阅读(2)  评论(0)    收藏  举报  来源