718. 最长重复子数组
动态规划
class Solution {
public int findLength(int[] nums1, int[] nums2) {
/**
* dp[i][j]定义为nums1[i - 1] == nums2[j - 1]时的最长重复子数组的长度
* 因为i - 1必须要大于等于0,所以i从1开始
*/
int[][] dp = new int[nums1.length + 1][nums2.length + 1];
int max = 0;
for (int i = 1; i < nums1.length + 1; i++) {
for (int j = 1; j < nums2.length + 1; j++) {
if (nums1[i - 1] == nums2[j - 1]){
dp[i][j] = dp[i - 1][j - 1] + 1;
max = Math.max(max, dp[i][j]);
}
}
}
return max;
}
}
/**
* 时间复杂度 O(n^2)
* 空间复杂度 O(n^2)
*/
https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray/