Leetcode 718.最长重复子数组(720)

题目

26年7月20日(首刷看解)

Go 复制代码
func findLength(nums1 []int, nums2 []int) int {
    //dp[i][j]分别表示nums1,nums2以下标i-1.j-1为结尾的长度最长的长度
   dp:=make([][]int,len(nums1)+1)
   for i,_ :=range dp{
    dp[i]=make([]int,len(nums2)+1)
   }
   res:=0
    for i:=1;i<=len(nums1);i++{
        for j:=1;j<=len(nums2);j++{
            if nums1[i-1]==nums2[j-1]{
                dp[i][j]=dp[i-1][j-1]+1
                res=max(res,dp[i][j])
            }
        }
    }
    return res
}

思路

这里其实默认的是连续的,题型LCS(Longest Common Subarray),

dp数组含义,dpij分别表示nums1,nums2以下标i-1.j-1为结尾的子数组最长长度,这里选择这样定义,是因为如果匹配的话,就会加在上一对匹配元素的后面,匹配段不能断。

连续的定义方式好像大多数都是这种,以某个元素结尾的子数组

然后就能想到递归公式,

如果当前这一对匹配,就在上一对的基础上+1dp[i][j]=dp[i-1][j-1]+1

如果上一对不匹配,那么就没有赋值,那么dp[i-1][j-1]=0,断掉了确实就是长度变成0,所以没问题。

但是这里根据定义也猜得到dp[len(nums)1][len(nums)2],根据dp定义不一定就是最大长度。

所以中途我们要维护一个最大值res,一直保持判断更新的状态.

相关推荐
行百里er32 分钟前
轻量级 Spring 监测工具——Spring Insight 发布了
spring boot·后端·监控
程序员阿黄1 小时前
基于 Django 与 Vue 3 的智能实验室预约系统设计与实现
后端·python·mysql·django·vue·毕设
光影少年1 小时前
Koa 为什么使用洋葱模型
后端·node.js·koa
用户298698530141 小时前
Python 如何实现 Word 与 RTF 文档互转
后端·python·api
打工仔折腾 AI1 小时前
用 Shell 脚本自动部署 mysqld_exporter 并接入 Prometheus 远程抓取
人工智能·后端·python·性能优化·ai agent 实战
毅炼1 小时前
不写多语言 SDK,怎么让 Python、Go、Node 服务接入注册中心?
java·后端·系统架构·gateway
Methy1 小时前
IoTHub半个月崩了五次?都是裸rethrow惹的祸
服务器·c++·后端
我不会起名字3222 小时前
一天一道力扣Hot100(36):深度优先算法---组合总和
数据结构·c++·后端·python·算法·go
回家路上绕了弯2 小时前
AI 编程助手为什么反复读取同一份上下文?如何减少无效重复
后端
Lost of 程序猿2 小时前
用 Quartz.NET 优雅地处理 .NET 定时任务:从选型到 Docker 部署全记录
后端·c#·asp.net