动态规划:
1.先声明一个接收最长公共的子数组的长度变量, 在定义一个dp数组表示在下标i和下标j中的公共最长的子数组的长度,在把nums1表示成背包,nums2表示成物品遍历。递推公式为如果背包和物品中的值相同最长子数组的长度加1,dp[i][j]=dp[i-1][j-1]+1。更新最长子数组的长度。
class Solution {
public int findLength(int[] nums1, int[] nums2) {
//接收最长的子数组的长度
int leng=0;
//表示在下标i和下标j中的公共最长的子数组的长度
int[][] dp=new int[nums1.length+1][nums2.length+1];
//遍历背包
for(int i=1;i<nums1.length+1;i++) {
//遍历物品
for (int j=1;j<nums2.length+1;j++) {
//如果背包和物品中的值相同最长子数组的长度加1
if (nums1[i-1]==nums2[j-1]){
dp[i][j]=dp[i-1][j-1]+1;
//更新最长子数组的长度
leng=Math.max(leng,dp[i][j]);
}
}
}
return leng;
}
}