动态规划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;
    }
相关推荐
镜子AI15 分钟前
教培机构多模态内容跨模态检索系统:基于CLIP的统一表征与图文混合召回算法
人工智能·python·算法·机器学习
小宋102126 分钟前
合成评测集怎么造才不“自嗨”:自动出题、去重、泄漏检测与人工抽检
人工智能·算法·机器学习
蒸蒸yyyyzwd39 分钟前
秋招笔记day58
算法·哈希算法
Jasmine_llq1 小时前
《P5663 [CSP-J 2019] 加工零件》
数据结构·算法·bfs·广度优先搜索·分层 bfs /·奇偶分层最短路·奇数最短步数
在所不辞兄1 小时前
分层PINN提升多物理场一致性
人工智能·神经网络·算法·机器学习·工程仿真
wanderist.1 小时前
CSP 第43次认证 T4:集合划分 —— 图染色与二分图判定
算法·图论
不做无法实现的梦~1 小时前
基于 PX4 的全仓库架构、无人机算法解析与开发学习规划
算法·架构·无人机
做cv的小昊1 小时前
【大模型算法自学笔记01】NLP基础知识(1.1 自注意力)
人工智能·笔记·算法·自然语言处理·大模型·llm
stolentime2 小时前
AT_arc182_a [ARC182A] Chmax Rush!题解
数据结构·c++·算法·动态规划
longlongzihan2 小时前
LeetCode 189. 轮转数组:从直观模拟到最优原地算法
c++·算法·leetcode