题解 | #牛群间的最大配对#

牛群间的最大配对

https://www.nowcoder.com/practice/b1e1afb9eb2c47e59bf25255d3a2948d

#include <vector>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums1 int整型vector
     * @param nums2 int整型vector
     * @return int整型
     */
    int maxUncrossedMatch(vector<int>& nums1, vector<int>& nums2) {
        // init
        f.resize(nums1.size(), vector<int>(nums2.size(), -1));
        for (auto p : nums1) n1.push_back(p);
        for (auto p : nums2) n2.push_back(p);
        // write code here
        return dfs(n1.size() - 1, n2.size() - 1);
    }

    // 记忆化搜索
    int dfs(int i, int j) {
        if (i < 0 || j < 0) return 0;
        if (f[i][j] != -1) return f[i][j];
        if (n1[i] == n2[j]) {
            f[i][j] = dfs(i - 1, j - 1) + 1;
        } else {
            f[i][j] = max(dfs(i - 1, j), dfs(i, j - 1));
        }
        return f[i][j];
    }

    vector<int> n1, n2;
    vector<vector<int> > f;
    // f[i][j]: n1 前 i 位与 n2 前 j 位的最大公共子序列长度
    // f[i][j] = f[i - 1][j - 1] + 1, if n1[i] == n2[j]
    // f[i][j] = max(f[i - 1][j], f[i][j - 1]), else
};

最长公共子序列

全部评论

相关推荐

02-22 21:16
已编辑
门头沟学院 运营
牛客928043833号:离了你谁还拿我当个宝
点赞 评论 收藏
分享
人生一梦:24年我投暑期实习,它以我不是女的为理由拒绝了我查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务