1035.不相交的线
🔃1035.不相交的线
在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。
现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:
nums1[i] == nums2[j] 且绘制的直线不与任何其他连线(非水平线)相交。 请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。
以这种方法绘制线条,并返回可以绘制的最大连线数。
思路
基本思想
只有相等才能绘制一条直线,并且线不能相交,这与最长公共子序列是一样的思路,只不过描述成了划线的步骤,所以可以根据最长公共子序列的思路做题
没有连接的线说明他们俩不匹配,是多余的元素,去掉多余的元素不影响线的连接,但是不能改变元素的相对位置,相当于线不能交叉
与 1143题 最长公共子序列是一样的思路,只不过换了一个描述
执行流程
- 初始化dp数组
- 按照递推方程更新dp数组
- 返回最后的元素作为最终的结果
代码
根据以上分析,得出以下代码:
|
|
总结
当前两个数可以连线,直接结果数+1
当前两个数无法连线,那么有一个数是多余的,只有一个多余,而不是至少一个多余,要想明白这个逻辑,因为是拿nums1中的一个元素与nums2中的所有元素依次比较,比较到一个不相等的位置,说明当前有一个元素多余,返回较长的公共子序列长度作为当前的结果