力扣 718. 最长重复子数组

题目来源:https://leetcode.cn/problems/maximum-length-of-repeated-subarray/description/

C++题解(思路来源代码随想录):动态规划

  1. 确定dp数组(dp table)以及下标的含义。dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。
  2. 递推公式:当A[i - 1] 和B[j - 1]相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1;
  3. 确定遍历顺序。这步在我这是最难的,因为不知道怎么实现,直到看到下面的图。其实本质上还是两个for循环,只是用的[i-1][j-1],走的是斜线,不是直线下来。因此,初始化时,第一行跟第一列都为0

上代码:

class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        int n1 = nums1.size(), n2 = nums2.size();
        // dp[i][j]表示nums1[i-1]与nums2[j-1] 公共的、长度最长的子数组长度
        // 动归更新条件为nums1[i]==nums2[j], dp[i][j] = dp[i-1][j-1] + 1
        vector< vector<int>> dp(n1+1, vector<int>(n2+1, 0));
        int result = 0;
        for(int i = 1; i <= n1; i++) {
            for(int j = 1; j <= n2; j++) {
                if(nums1[i-1] == nums2[j-1]) {
                    dp[i][j] = dp[i-1][j-1] + 1;
                    result = max(result, dp[i][j]);
                }
            }
        }
        return result;
    }
};

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-29 04:38:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-29 04:38:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-29 04:38:05       82 阅读
  4. Python语言-面向对象

    2024-03-29 04:38:05       91 阅读

热门阅读

  1. 网络安全渗透测试工具

    2024-03-29 04:38:05       46 阅读
  2. 题目 2894: 肿瘤检测

    2024-03-29 04:38:05       47 阅读
  3. 【深度学习】球衣号码识别 re-id追踪

    2024-03-29 04:38:05       39 阅读
  4. SpringBoot与Prometheus监控整合

    2024-03-29 04:38:05       41 阅读
  5. unity中 鼠标按下移动端与pc端的位置

    2024-03-29 04:38:05       37 阅读
  6. 设置火狐浏览器打开unity开发的webGL

    2024-03-29 04:38:05       46 阅读
  7. 蓝桥集训之小国王

    2024-03-29 04:38:05       43 阅读
  8. 数据仓库——无事实的事实表

    2024-03-29 04:38:05       45 阅读
  9. 31-4 命令执行漏洞 - RCE原理

    2024-03-29 04:38:05       43 阅读