动态规划Day31:子序列长度1

300. 最长递增子序列

dp[i] 表示「以 nums[i] 为最后一个元素」的最长递增子序列长度 ------ 这意味着:

  • dp 数组里的每个值,只代表 "以对应位置结尾" 的子序列长度;

  • 整个数组的最长递增子序列,不一定以最后一个元素结尾

所以还需要一个res去存储出现过的最大dpi

j用来遍历,寻找i能够插入的最大子序列长度的末尾

cpp 复制代码
    int lengthOfLIS(vector<int>& nums) {
        if(nums.size() == 1){
            return 1;
        }
        vector<int> dp(nums.size(), 1);
        int res = 0;
        for(int i = 1; i < nums.size(); i++){
            for(int j = 0; j < i; j++) {
                if(nums[j] < nums[i]){
                    dp[i] = max(dp[i], dp[j] + 1);
                }
            }
            res = max(res, dp[i]);
        }
        return res;
    }

674. 最长连续递增序列

是连续,只需要和前一个对比,所以只需要一层循环

cpp 复制代码
    int findLengthOfLCIS(vector<int>& nums) {
        if(nums.size() <= 1){
            return nums.size();
        }
        vector<int> dp(nums.size(), 1);
        int res = 1;
        for(int i = 1; i < nums.size(); i++){
            if(nums[i] > nums[i - 1]){
                dp[i] = dp[i - 1] + 1;
                res = max(res, dp[i]);
            }
        }
        return res;
    }

718. 最长重复子数组

dij代表以i - 1,j - 1 为结尾的最长子串长度

(因为这样可以方便初始化,可以直接将无意义的第一行dp0j与第一列dp0j全部设为0,若代表i,j结尾的子串长度 初始化时还需要额外进行一个比较判断其是否相等才可以赋值)

初始化全部为0

状态转移:i-1 和 j-1 元素相等时,dpij = dpi - 1j - 1 + 1

遍历顺序:左到右 上到下

cpp 复制代码
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));
        int res = 0;
        for(int i = 1; i < nums1.size() + 1; i++){
            for(int j = 1; j < nums2.size() + 1; j++){
                if(nums1[i - 1] == nums2[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                    res = max(res, dp[i][j]);
                }
            }
        }
        return res;
    }
相关推荐
huohaiyu15 分钟前
深入解析Java垃圾回收机制
java·开发语言·算法·gc
汉克老师15 分钟前
GESP6级C++考试语法知识(五十三、动态规划----背包问题(六、分组背包)
c++·动态规划·背包问题·gesp6级·gesp六级·分组背
浮芷.22 分钟前
鸿蒙PC端 TTS 并发调用问题详解:资源竞争与队列管理
算法·华为·开源·harmonyos·鸿蒙·鸿蒙系统
装不满的克莱因瓶30 分钟前
掌握感知器的学习原理
人工智能·python·神经网络·算法·ai·卷积神经网络
Lsk_Smion30 分钟前
力扣实训 _ [994].腐烂的橘子/图论
算法·leetcode·图论
轻微的风格艾丝凡38 分钟前
两电平三相VSC整流模式从不控整流平滑切换至有源整流调试记录
算法·dsp·c2000
dongf20191 小时前
R语言KNN算法
算法·数据分析·r语言
小O的算法实验室1 小时前
2025年IEEE TASE,基于双层耦合平均场博弈的大规模智能体集成任务分配与轨迹规划
人工智能·算法·机器学习
8Qi81 小时前
LeetCode 337:打家劫舍 III(House Robber III)—— 题解 ✅
算法·leetcode·二叉树·动态规划
地平线开发者1 小时前
从 INT64 Div 算子约束到 Cast 修复全流程
算法