Maximum Length of Repeated Subarray解题报告
来源:互联网 发布:浏览器打不开淘宝图片 编辑:程序博客网 时间:2024/06/03 10:32
题目链接Maximum Length of Repeated Subarray
题目描述:
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: 3Explanation: The repeated subarray with maximum length is [3, 2, 1].Note:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100
简单来说,就是求两个数组的最长公共子数组的长度。容易想到用动态规划来解决。将问题看成是求公共子数组中分别以A[i],B[j]
结尾的数组最大长度。其中0 <= i < len(A); 0 <= j < len(B)
。
设dp[i][j]是以A[i],B[j]结尾的公共子数组的最大长度。在上面的例子中dp[0][2] = 1, dp[4][2] = 3 dp[4][3] = 0
这样自然得到一个二维的动态规划方程:
if A[i] == B[j] dp[i][j] = dp[i-1][j-1] + 1else dp[i][j] = 0
然后二维数组的最大值就是问题的解了
C++实现代码
class Solution {public: int findLength(vector<int>& A, vector<int>& B) { int len1 = A.size(); int len2 = B.size(); int max = 0; if(len1 == 0 || len2 == 0){ return 0; } int **dp = new int*[len1]; for(int i = 0; i < len1; i++){ dp[i] = new int[len2]; for(int j = 0; j < len2; j++){ dp[i][j] = 0; } } for(int i = 0; i < len1; i++){ for(int j = 0; j < len2; j++){ if(i == 0 || j == 0){ if(A[i] == B[j]){ dp[i][j] = 1; } }else{ if(A[i] == B[j]){ dp[i][j] = dp[i-1][j-1] + 1;//动态规划方程 } } max = dp[i][j] > max ? dp[i][j] : max; } } return max; }};
实现过程中涉及到二维数组的初始化和处理下标等细节问题,不过算法的核心就是那个动态规划方程。
阅读全文
0 0
- Maximum Length of Repeated Subarray解题报告
- Maximum Length of Repeated Subarray
- Maximum Length of Repeated Subarray
- Maximum Length of Repeated Subarray
- leetcode 718( Maximum Length of Repeated Subarray)
- Leetcode 718. Maximum Length of Repeated Subarray
- 718. Maximum Length of Repeated Subarray
- 718. Maximum Length of Repeated Subarray
- LeetCode718. Maximum Length of Repeated Subarray(Medium)
- 718. Maximum Length of Repeated Subarray
- Leetcode | Maximum Length of Repeated Subarray
- LeetCode #718 Maximum Length of Repeated Subarray
- 718.Maximum Length of Repeated Subarray(M)
- Leetcode | Maximum Length of Repeated Subarray
- LeetCode:Maximum Length of Repeated Subarray
- [leetcode]Maximum Length of Repeated Subarray
- 718. Maximum Length of Repeated Subarray
- 718. Maximum Length of Repeated Subarray
- 01可行性研究报告(机房收费系统V2.1)
- 函数的调用过程--栈帧
- Java程序设计(Java9版):第0章 绪论(Introduction)
- Freemaker
- spring配置文件
- Maximum Length of Repeated Subarray解题报告
- 数据库设计之需求分析
- 面向对象与面向过程
- 漫画:什么是B-树?
- 正确关闭迅雷右侧浏览器的方法
- HTML-表格的奇数偶数行颜色不同
- QNX安全加密-通过 Certicom 和 QNX 满足安全认证要求
- 网页爬虫 静态网页<一>
- 写一个方法void triangle(int a,int b,int c),判断三个参数是否能构成一个三角形。如果不能则抛出异常IllegalArgumentException,显示异常信息:a,b,