力扣-718最长重复子数组(dp)
创始人
2025-05-28 04:19:14
0

力扣-718最长重复子数组

1、题目

给两个整数数组 nums1nums2 ,返回 两个数组中 公共的长度最长的子数组的长度 。

示例 1:

输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3,2,1] 。

2、分析

  • 题目。由题目可知,我们要求得是两个数组中间最长的相同的一部分,这里我还是首先想到的是暴力,推一下确实暴力也能够进行推出来。但是我们要进一步看能不能进行优化,根据最长长度,我们可以联想到是不是可以使用dp动态规划,答案是可以的。

  • 1)二维dp推导。这里我们要推导,所以跟前一个状态有关,前一个状态是什么?那就是nums1[i - 1]和nums2[j - 1]相等,也就是前一个数是相等的,所以我们到当前这个数时就做长度+1操作。也就是dp[i]【j】=dp[i - 1]【j-1】+1。

    2)或者第二种想法,就是按图形来分析。两个数组,一个为列,一个为行,所以就对应的话,这个对应的十字交点相等,那么值就是左上角值+1,也就是dp[i]【j】=dp[i - 1]【j-1】+1。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HcCf14S8-1678845287470)(img/image-20230315093539882.png)]

  • dp边界。由于第一个数可能会相等,所以左上角必须有值也就是i-1与j-1得,所以长度要比nums数组多1。

  • 一维dp推导,由图像可知,后一行的数是前一行的数复制到下一行然后如果当前数前一个相等,就当前数为前面一个加1。也就是至于那一行的数有关,dp[j]=dp[j-1] + 1;

3、代码及注释

class Solution {public int findLength(int[] nums1, int[] nums2) {// 1.进行暴力遍历int max = 0;for (int i = 0; i < nums1.length; i++){int temp = 0;for (int j = 0; j < nums2.length; j++) {if (nums1[i] == nums2[j]){temp++;int k = i;int m = j;while(k + 1 < nums1.length && m + 1 < nums2.length && nums1[++k] == nums2[++m]){temp++;}max = Math.max(max, temp);temp = 0;}}}return max;// 2.二维dpint[][] dp = new int[nums1.length + 1][nums2.length + 1];int max = 0;for (int i = 1; i < nums1.length + 1; i++){for (int j = 1; j < nums2.length + 1; j++){if (nums1[i - 1] == nums2[j - 1]){dp[i][j] = dp[i - 1][j - 1] + 1;max = Math.max(max, dp[i][j]);}}}return max;// 3.一维dpint[] dp = new int[nums2.length + 1];int max = 0;for (int i = 1; i < nums1.length + 1; i++){for (int j = nums2.length; j > 0; j--){if (nums1[i - 1] == nums2[j - 1]){dp[j] = dp[j - 1] + 1;}else{// 每一次继承上一行的dp[j]值,如果相等,就会+1存max中,如果不相等,当前行刷新dp[j]值为0。dp[j] = 0;}max = max > dp[j] ? max : dp[j];}}return max;}
}

4、练习

力扣题目练习:718. 最长重复子数组

相关内容

热门资讯

国产电脑板安卓系统,引领智能办... 你有没有想过,家里的电脑板竟然也能用安卓系统?没错,就是那个我们平时手机上用的安卓系统,现在竟然也能...
安卓系统怎么调ins,实际应用... 你有没有发现,Instagram(简称ins)这个社交平台简直是个宝藏,各种美图、短视频,还有各种有...
手机安卓系统耗电好快,揭秘安卓... 亲爱的手机控们,你们是不是也有这样的烦恼:手机安卓系统耗电好快,仿佛电量就像流水一样哗啦啦地溜走?别...
安卓系统能定位软件,探索安卓系... 你有没有想过,你的手机里那些神奇的软件是怎么知道你在哪儿的呢?没错,就是安卓系统能定位软件的功劳!今...
安卓系统参数测试软件,基于安卓... 你有没有想过,你的安卓手机里那些神秘的系统参数,其实就像是一扇通往手机性能深处的窗户呢?想要了解这扇...
透明蓝牙耳机安卓系统,智能生活... 你有没有想过,在这个科技飞速发展的时代,拥有一副好耳机是多么重要的一件事呢?想象当你沉浸在美妙的音乐...
微软10系统安装安卓,跨平台体... 亲爱的读者们,你是否曾想过在Windows 10系统上安装安卓系统呢?想象一边享受着Windows的...
ios跟安卓系统混合,打造跨平... 你有没有发现,现在手机的世界里,iOS和安卓就像是两个截然不同的王国,各自有着忠实的粉丝。但你知道吗...
安卓如何系统如何降级,还原至旧... 你有没有想过,你的安卓手机突然间变得卡顿不堪,性能大不如前?别急,今天就来教你怎么给安卓系统来个“时...
中兴不能用安卓系统,探索自主操... 你知道吗?最近有个大新闻在科技圈里炸开了锅,那就是咱们的国产手机品牌中兴,竟然不能用安卓系统了!这可...
安卓系统取消深色模式,探索新功... 你知道吗?最近安卓系统来了一次大变动,那就是取消了深色模式!这可让不少手机用户感到有点懵圈。咱们一起...
安卓模拟苹果系统游戏,畅玩经典... 你有没有想过,在安卓手机上也能玩到那些只在苹果系统上才能体验的游戏呢?没错,就是那种画面精美、操作流...
安卓系统澳门电召,安卓系统下的... 你有没有想过,在繁忙的都市生活中,如何轻松地叫到一辆车呢?现在,就让我带你走进安卓系统澳门电召的世界...
安卓系统的字母代表,字母背后的... 你知道吗?在我们每天使用的安卓手机里,那些看似普通的字母组合,其实有着它们独特的含义和故事呢!今天,...
安卓如何转iphone系统,系... 你有没有想过,从安卓转到iPhone系统,就像是从一个熟悉的老朋友跳到一个全新的世界呢?想象你手中的...
安卓攻略系统变美文,轻松打造完... 亲爱的安卓用户们,是不是觉得手机界面越来越单调,想要给它来个华丽变身呢?别急,今天就来给你支几招,让...
小米9系统安卓多少,基于安卓1... 亲爱的读者们,你是否也像我一样,对手机系统充满了好奇?今天,我们就来聊聊小米9这款手机的系统,看看它...
安卓系统与骁龙系统区别,深度解... 你有没有想过,为什么你的手机里装的是安卓系统,而朋友的手机里却是骁龙系统呢?这两种听起来有点像亲戚的...
安卓刷winphone系统6,... 你有没有想过,如果你的安卓手机突然变成了Windows Phone 6呢?想象那会是怎样一番景象?今...
锤子安卓12系统更新,畅享智能... 你知道吗?最近锤子手机的用户们可是炸开了锅,因为锤子科技终于发布了安卓12系统的更新!这不仅仅是一个...