动态规划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;
    }
相关推荐
一去不复返的通信er1 分钟前
力扣15:盛最多水的容器
算法·leetcode
Navigator_Z4 分钟前
LeetCode //C - 1309. Decrypt String from Alphabet to Integer Mapping
c语言·算法·leetcode
潇湘秦7 分钟前
SQL Server 2016+ 整数类型元数据扩宽(秒级变更)完整说明
数据库·算法
Figo_Cheung1 小时前
Figo基于结构空间算法假设(SSAH)的生成式大模型优化范式与工程实现边界研究——提出适应AGI架构演化的自适应拓扑感知表征机制
算法·架构·agi
旖旎夜光2 小时前
LCR 170:交易逆序对的总数(归并排序) —— 题解
c++·学习·算法·leetcode·排序算法
微尘hjx10 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
小蒋观天下14 小时前
雷击与浪涌防护:前端SPD选型、接地网误区,接地不当反而引入干扰
深度学习·算法·机器学习
WBluuue15 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
澳鹏Appen17 小时前
澳鹏重磅发布ExamOCRBench:面向端到端试卷判分的多任务基准
算法·benchmark·基准评测