前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Leetcode 718. Maximum Length of Repeated Subarray

Leetcode 718. Maximum Length of Repeated Subarray

作者头像
Tyan
发布2021-07-08 16:22:07
发布2021-07-08 16:22:07
39700
代码可运行
举报
文章被收录于专栏:SnailTyanSnailTyan
运行总次数:0
代码可运行

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书

1. Description

2. Solution

**解析:**求两个数组的最长连续子序列,典型的动态规划问题,动态规划问题最主要的就是找到状态转移方程,确定状态转移方程之前要确定状态。通过两层循环,可以遍历两个数组所有的可能组合情况,dp[i][j]即第一个数组的前i个元素和第二个数组的前j个元素的最长连续子序列长度。初始状态,所有的最长子序列长度都为0。循环开始,如果nums1[i]=nums2[j],则最长子序列长度应+1,而总长度又取决于之前的dp[i-1][j-1],如果nums1[i-1]=nums2[j-1],则总长度+1,如果nums1[i-1] != nums2[j-1],则dp[i-1][j-1]=0dp[i][j]=1,这两种情况的状态转移方程都为dp[i][j] = dp[i-1][j-1] + 1,因为初始状态设置时已经将dp[i-1][j-1]设为了0。由于dp[1][1] = dp[0][0]+1,因此创建初始状态矩阵时长度和宽度都要加1。最后,从所有可能情况中找到最长的连续子序列长度。

  • Version 1
代码语言:javascript
代码运行次数:0
复制
class Solution:
    def findLength(self, nums1: List[int], nums2: List[int]) -> int:
        m = len(nums1)
        n = len(nums2)
        dp = [[0] * (n+1) for i in range(m+1)]

        for i in range(m):
            for j in range(n):
                if nums1[i] == nums2[j]:
                    dp[i][j] = dp[i-1][j-1] + 1
        return max(max(row) for row in dp)

Reference

  1. https://leetcode.com/problems/maximum-length-of-repeated-subarray/
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Description
  • 2. Solution
  • Reference
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档