🧩 LeetCode:最长重复子数组(Longest Common Subarray)
📌 题目描述
给定两个整数数组 nums1
和 nums2
,请你找出这两个数组中 长度最长的公共子数组,并返回该子数组的长度。
- 公共子数组:必须是 连续的子数组(不是子序列)。
- 数组中元素值不一定唯一。
- 保证两个数组长度不超过
1000
,单个元素不超过100
。
💡 示例说明:
输入:
nums1 = [1,2,3,2,1]
nums2 = [3,2,1,4,7]
输出: 3
解释: 最长的公共子数组是 [3,2,1],长度为 3。
🔍 解题分析
这是一个典型的 动态规划问题,问题核心是寻找两个数组中位置连续、值相同的子数组。
我们需要考虑的问题包括:
- 如何高效地找出所有可能的公共子数组?
- 如何避免暴力搜索的高时间复杂度?
✅ 解题方法一:二维动态规划(DP)
📘 状态定义
我们使用二维数组 dp
,其中: