求两个数组的最长重复子数组 Maximum Length of Repeated Subarray
为什么80%的码农都做不了架构师?>>>
问题:
Given two integer arrays A
and B
, return the maximum length of an subarray that appears in both arrays.
Example 1:
Input: A: [1,2,3,2,1] B: [3,2,1,4,7] Output: 3 Explanation: The repeated subarray with maximum length is [3, 2, 1].
Note:
- 1 <= len(A), len(B) <= 1000
- 0 <= A[i], B[i] < 100
解决:
① 给定两个数组A和B,返回两个数组的最长重复子数组。
dp[i][j]表示数组A的前i个数字和数组B的前j个数字的最长重复子数组的长度,如果dp[i][j]不为0,则A中第i个数组和B中第j个数字必须相等。
以[1,2,2]和[3,1,2]为例,dp数组为:
3 1 2
1 0 1 0
2 0 0 2
2 0 0 1
当A[i] == B[j]时,dp[i][j] = dp[i - 1][j - 1] + 1;
当A[i] != B[j]时,dp[i][j] = 0;
每次算出一个dp值,都要用来更新结果res,这样就能得到最长相同子数组的长度了。
class Solution { //83ms
public int findLength(int[] A, int[] B) {
int res = 0;
int[][] dp = new int[A.length + 1][B.length + 1];
for (int i = 1;i < dp.length;i ++){
for (int j = 1;j < dp[i].length;j ++){
dp[i][j] = (A[i - 1] == B[j - 1]) ? dp[i - 1][j - 1] + 1 : 0;
res = Math.max(res,dp[i][j]);
}
}
return res;
}
}
② 简化为一维数组。
class Solution { //41ms
public int findLength(int[] A, int[] B) {
int res = 0;
int[] dp = new int[B.length + 1];
for (int i = 1;i <= A.length;i ++){
for (int j = B.length;j > 0;j --){
if (A[i - 1] == B[j - 1]){
dp[j] = dp[j - 1] + 1;
res = Math.max(res,dp[j]);
}else {
dp[j] = 0;
}
}
}
return res;
}
}
转载于:https://my.oschina.net/liyurong/blog/1608199
求两个数组的最长重复子数组 Maximum Length of Repeated Subarray相关推荐
- 718. Maximum Length of Repeated Subarray 最长重复子数组
Title 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 **解释: ** ...
- leetcode 718. Maximum Length of Repeated Subarray | 718. 最长重复子数组(动态规划)
题目 https://leetcode.com/problems/maximum-length-of-repeated-subarray/ 题解 Dynamic Programming [Accept ...
- leetcode718. 最长重复子数组
一:题目 二:上码 class Solution {public:/**思路:1.分析题意:1 2 3 6 7 41 2 6 7 4 3这里我们先遇到的1 2 但后来我们又遇见了6 7 4 那么我们的 ...
- LeetCode 718最长重复子数组
题目链接:力扣 子序列默认不连续,子数组默认连续 思路: 动态规划: 定义dp数组: dp ...
- 两个数组进行比较_LeetCode 718. 最长重复子数组 | Python
718. 最长重复子数组 题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray 题 ...
- 最长重复子数组最长公共子序列不相交的线
引言 这同样是两种类型的题目,有很多相似的地方和不同的地方,区别依然是连续和不连续之分. 最长重复子数组 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例: 输入: ...
- leetcode(力扣) 718. 最长重复子数组 1143. 最长公共子序列 1035. 不相交的线 (动态规划)
文章目录 718. 最长重复子数组 题目描述 思路分析 完整代码 1143. 最长公共子序列 1035. 不相交的线: 这三道题思路基本一样,尤其是最后两道,代码都一样,一点不需要改的,所以放一起把. ...
- Java实现 LeetCode 718 最长重复子数组(动态规划)
718. 最长重复子数组 给两个整数数组 A 和 B ,返回两个数组中公共的.长度最长的子数组的长度. 示例 1: 输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释 ...
- 力扣-718最长重复子数组(dp)
力扣-718最长重复子数组 1.题目 给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 .长度最长的子数组的长度 . 示例 1: 输入:nums1 = [1,2,3,2,1], ...
最新文章
- 【廖雪峰python入门笔记】切片
- 打印格式设置(SPAD)
- Verilog | HDL 音乐流水灯(代码类)
- ShaderLab学习小结(一)最简化的顶点片断Shader
- 彭文华:详解数字化转型的破局之道(附直播视频)
- 公安网络安全部门封杀的2000家淘宝钓鱼网站
- Golang slice 的底层实现
- 鸿蒙系统手机现在有什么,华为鸿蒙手机迟迟未来 手机操作系统面临的难点有哪些...
- 6.边缘检测:梯度——边缘检测、导数与边缘、什么是梯度_2
- uwp post php,window_Win10开发系列专题五 UWP应用添加画布及语音输入支持,这是微软Win10十个开发系列专 - phpStudy...
- qt-rcc提示找不到资源文件
- spring data redis的使用jar包版本冲突问题
- win10专业版没有触摸板选项_win10鼠标光标不见了触摸板没反应
- ipv6电视直播Android,关于高校电视直播(ipv4ipv6)
- shell脚本语法教程
- 中职计算机教学工作随笔,教师随笔日记(精选6篇)
- 恒生电子 招聘FPGA开发/验证工程师
- 无向图的极大团、最大团(Bron-Kerbosch算法)
- mac命令行压缩解压rar文件
- NNDL 2022秋
热门文章
- 在下列选项中,没有构成死循环的程序的是?
- STM32的IIC应用详解3
- 《深入理解计算机系统》读书笔记九:寄存器结构
- spring31-1: 事务-传播行为
- ORACLE TNS(transparence Network Substrate透明网络底层)
- 云计算开发技术,Python自动化运维开发实战三部分
- 一个查看UI5控件所有公有方法的小技巧
- ceph-deploy出错UnableToResolveError Unable to resolve host
- weblogic负载分发
- JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载