小旭讲解 基础算法系列 - 线性 DP 之最长上升子序列
小旭讲解 基础算法系列 - 线性 DP 之最长上升子序列

视频讲解

代码

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int n=nums.size();
        vector<int> f(n+1, 1);
        int ans=1;
        // f[i] 以i数字结尾,所构成的最长上升子序列的长度
        // 重叠子问题
        // f[0] f[1] f[2] f[3] .. f[n]
        // f[i] -> f[0] ... f[i-1]
        // 最优子结构
        // f[i]
        
        // 分析状态空间是什么?
        // 分析状态空间如何计算
        for(int i=2;i<=n;++i) {
            for(int j=i-1;j>=1;--j) {
                if(nums[i-1]>nums[j-1]) f[i]=max(f[i],f[j]+1);
            }
            ans=max(ans,f[i]);
        }
        return ans;
    }
};

参考

[1]. LeetCode 300. 最长递增子序列. https://leetcode-cn.com/problems/longest-increasing-subsequence/

欢迎分享,引用。若转载,请联系我,谢谢配合。
本文地址:https://qoogle.top/xiaoxu-tutorial-bas-linear-dp-longest-inreasing-subsequence/
0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments