关于动态规划【力扣1143.最长公共子序列的思考】

1、与前几题的区别

【力扣300.最长递增子序列】一个数组,不连续

【力扣674.最长连续递增子序列】一个数组,连续

【力扣718.最长重复子数组】两个数组,连续

【力扣1143.最长公共子序列】两个数组,不连续

(本题是求两个数组不连续的最长公共子序列的长度)

整体代码如下图所示

2、递推公式

本题与上一题的关键区别在于要求两个数组"不连续"的最长公共子序列的长度。当前位置dpij的状态来自三个方向。

(因为要求不连续的,所以只要有一样的就可以把状态转移给下一个)

【本题】递推公式部分的代码如下图所示

【上一题】要求的是连续的,当前位置dpij的状态来自一个方向:左上角。

(因为要求连续的所以必须前一个是连续的,才可以把状态转移给下一个。如果前一个不一样,当前的一样,就要重新开始计算)

递推公式部分的代码如下图所示

3、返回值

dp数组里的每个值,要么从左上角加1得到,要么是上方或左方元素的最大值,所以最大值一定出现在右下角,所以返回dptext1.size()text2.size()就好。

(dptext1.size()text2.size()表示以text1.size()-1和text2.size()-1为结尾的最长公共子序列的长度)

相关推荐
张欣-男21 分钟前
3分钟理解线性代数
线性代数·算法
白狐_79825 分钟前
408 数据结构|外部排序优化:怎么减少时间开销
数据结构·算法
小白说大模型25 分钟前
Hermes 全配置指南:从裸版到 AI Agent 天花板
大数据·人工智能·学习·算法·机器学习·数据挖掘
a1879272183136 分钟前
【算法】动态规划入门:从打家劫舍到状态设计的三堂课
算法·leetcode·动态规划·dp·回溯·暴力
淡海水10 小时前
07-04-并发-ConcurrentBag-T-工作窃取WorkStealing算法
开发语言·算法·c#·bag·concurrent·workstealing
leobertlan11 小时前
好玩系列:训练一个神经网络模型指导小孩玩游戏2-大局观教练
算法
Tisfy11 小时前
LeetCode 3876.构造奇偶一致的数组 II:三种情况分类讨论(其实还是脑筋急转弯)
算法·leetcode·题解·脑筋急转弯
lvwangshu12 小时前
P7668 [JOI 2018 Final] 团子制作 / Dango Maker 题解
动态规划·题解·贪心·性质题·思维好题
乐迪信息12 小时前
智慧港口船舶AI算法实现在线状态监测
大数据·人工智能·深度学习·算法·计算机视觉
木井巳14 小时前
【BFS/DFS 解决 FloodFill 算法】太平洋大西洋水流问题
java·算法·leetcode·深度优先·广度优先·宽度优先·推荐算法