类似两个字符串的比较问题,使用动态规划,时间复杂度为 O ( m ∗ n ) O(m*n) O(m∗n)。
class Solution {
public:
int findLength(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size();
int n = nums2.size();
int dp[m+1][n+1]; //dp[i][j]表示nums1的前i个数字和nus2的前j个数字的公共长度
//递推关系中会用到i-1或j-1
for(int i = 0;i<=m;i++){
for(int j = 0;j<=n;j++){
dp[i][j] = 0;
}
}
for(int i = 1;i<=m;i++){
for(int j = 1;j<=n;j++){
if(nums1[i-1] ==nums2[j-1]){
dp[i][j] = dp[i-1][j-1]+1;
}else{
dp[i][j] = 0;
}
}
}
int max_ = 0;
for(int i = 0;i<=m;i++){
for(int j = 0;j<=n;j++){
max_ = max(dp[i][j],max_);
}
}
return max_;
}
};