今天写每日一题的时候看到一道动态规划的题目:
最长重复子数组
因为更新DP数组只依赖其对角线上的元素,所以可以在空间上进行优化,将2维的数组降为一维,以下
是降维前后代码:
降维前
public int findLength(int[] A, int[] B) {
int max = 0;
int[][] dp = new int[A.length + 1][B.length + 1];
for (int i = 1; i <= A.length; i++) {
for (int j = 1; j <= B.length; j++) {
if (A[i - 1] == B[j - 1])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = 0;
max = Math.max(max, dp[i][j]);
}
}
return max;
}
降维后
public int findLength(int[] A, int[] B) {
int max = 0;
int[] dp = new int[B.lengt