leetcode 1035. Uncrossed Lines

题目描述

本题本质上就是求nums1和nums2的最长公共子序列的长度。因此本题本质上与第1143题一模一样。

代码:

cpp 复制代码
class Solution {
public:
    int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
        //本题等价于求nums1和nums2的最长公共子序列的长度
        int len1 = nums1.size();
        int len2 = nums2.size();
        //i的取值范围是[1,len1]
        //j的取值范围是[1,len2]
        //dp[i][j]表示nums1[0,i-1]和nums2[0,j-1]的最长公共子序列的长度
        //dp[0][j]表示nums1为空,此时不存在公共子序列,dp[0][j]都应该等于0
        //dp[i][0]表示nums2为空,此时不存在公共子序列,dp[i][0]都应该等于0
        //i!=0 且 j!=0时,有两种可能:
        //如果nums1[i-1]等于nums2[j-1],dp[i][j]=dp[i-1][j-1]+1,dp[i][j]由前面的dp[i-1][j-1]覆盖,可以不初始化,或者为了编码方便可以统一初始化为0
        //如果nums1[i-1]不等于nums2[j-1],dp[i][j]=max(dp[i-1][j],dp[i][j-1]),dp[i][j]由前面的dp[i-1][j]或者dp[i][j-1]覆盖,可以不初始化,或者为了编码方便可以统一初始化为0
        vector<vector<int>> dp(len1+1,vector<int>(len2+1,0));
        for(int i = 1;i <= len1;i++){
            for(int j =1;j <= len2;j++){
                if(nums1[i-1] == nums2[j-1])
                    dp[i][j] = dp[i-1][j-1] +1;
                else
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
            }
        }
        return dp[len1][len2];
    }
};
相关推荐
自信的小螺丝钉10 分钟前
Leetcode 146. LRU 缓存 哈希表 + 双向链表
leetcode·缓存·散列表
机器学习之心1 小时前
多目标鲸鱼优化算法(NSWOA),含46种测试函数和9个评价指标,MATLAB实现
算法·matlab·多目标鲸鱼优化算法·46种测试函数·9个评价指标
max5006002 小时前
基于Meta Llama的二语习得学习者行为预测计算模型
人工智能·算法·机器学习·分类·数据挖掘·llama
王哥儿聊AI3 小时前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程
手握风云-5 小时前
优选算法的寻踪契合:字符串专题
算法
闭着眼睛学算法5 小时前
【华为OD机考正在更新】2025年双机位A卷真题【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】
java·c语言·javascript·c++·python·算法·华为od
IT古董5 小时前
【第五章:计算机视觉-项目实战之目标检测实战】2.目标检测实战:中国交通标志检测-(2)中国交通标志检测数据格式转化与读取
算法·目标检测·计算机视觉
MobotStone5 小时前
LLM 采样入门到进阶:理解与实践 Top-K、Top-P、温度控制
算法
杨小码不BUG6 小时前
CSP-J/S初赛知识点精讲-图论
c++·算法·图论··编码·csp-j/s初赛
LeaderSheepH7 小时前
常见的排序算法
数据结构·算法·排序算法