0
点赞
收藏
分享

微信扫一扫

2022-2-1 leetcode.718.最长重复子数组

ZGtheGreat 2022-02-01 阅读 62

在这里插入图片描述
别人的做法

int findLength(vector<int>& A, vector<int>& B) {
    int len1 = A.size(), len2 = B.size(),maxNum=0;
    vector<vector<int>> dp(len1 , vector<int>(len2 , 0));
    for (int i = 0; i < len1; ++i) {
        for (int j = 0; j < len2; ++j) {
            if (i == 0 || j == 0) {
                dp[i][j] = A[i] == B[j] ? 1 : 0;
            }
            else    if (A[i] == B[j])
            {
                dp[i][j] = dp[i - 1][j - 1] + 1;
                maxNum = max(maxNum, dp[i][j]);
            }
            else
                dp[i][j]=0;

        }
    }
    return maxNum;
}

在这里插入图片描述
改进后的正确代码:

class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        int len1 = nums1.size(),len2 = nums2.size(),maxlen = 0;
        vector<vector<int>> dp(len1,vector(len2,0));
        for(int i = 0;i < len1;i++){
            for(int j = 0;j < len2;j++){
                if(i == 0 || j == 0){
                    dp[i][j] = (nums1[i] == nums2[j] ? 1:0);
                }
                else if(nums1[i] == nums2[j]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }
                maxlen = max(dp[i][j],maxlen);
            }
        }
        return maxlen;
    }
};

在这里插入图片描述

举报

相关推荐

0 条评论