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,一直保持判断更新的状态.

相关推荐
2601_962055973 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
Lost of 程序猿5 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
QQ_21696290966 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
郑州光合科技余经理7 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒7 小时前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端
大辉狼_音频架构8 小时前
进阶:从源码编译 SOF 固件与 topology
后端
大辉狼_音频架构8 小时前
上板:让 SOF 在 FRDM-i.MX8MP 上跑起来
后端
大辉狼_音频架构9 小时前
FRDM-IMX8MP UUU 烧录 eMMC 指南
后端
运行时异常9 小时前
【WMS 仓储系统集成 AI Agent 实战】第 3 讲:Spring Security 6 + JWT——addFilterBefore 一词之差,全站 401
java·后端
LinMINGJing00710 小时前
PageHeaderData:Page 的页面头
后端