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

300. 最长递增子序列

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

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

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

所以还需要一个res去存储出现过的最大dp[i]

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. 最长重复子数组

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

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

初始化全部为0

状态转移:i-1 和 j-1 元素相等时,dp[i][j] = dp[i - 1][j - 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;
    }
相关推荐
lxl13072 小时前
C++算法(3)二分算法
数据结构·c++·算法
随意起个昵称2 小时前
Dijstra算法学习笔记
笔记·学习·算法
lifallen2 小时前
笛卡尔树 (Cartesian Tree)
java·数据结构·算法
ab1515172 小时前
2.15完成105、106、110
数据结构·算法
Clarence Liu2 小时前
用大白话讲解人工智能(5) SVM支持向量机:找一条“最宽的分隔线“
人工智能·算法·支持向量机
不想看见4042 小时前
N-Queens -- 回溯法 -- 力扣101算法题解笔记
java·数据结构·算法
xuxianliang2 小时前
第152章 纲领的统一(悦儿)
算法·程序员创富
XLYcmy2 小时前
智能体大赛 技术架构 核心驱动层
人工智能·算法·机器学习·llm·prompt·agent·qwen
月挽清风2 小时前
代码随想录第39天:动态规划
算法·动态规划