LeetCode 打卡day52--动态规划之子序列问题

news/2025/3/15 4:58:25/

一个人的朝圣 — LeetCode打卡第52天

  • 知识总结
  • Leetcode 300. 最长递增子序列
    • 题目说明
    • 代码说明
  • Leetcode 674. 最长连续递增序列
    • 题目说明
    • 代码说明
  • Leetcode 718. 最长重复子数组
    • 题目说明
    • 代码说明


知识总结

今天运用动态规划来解决子序列问题.
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

连续子序列 等价于 子数组


Leetcode 300. 最长递增子序列

题目链接

题目说明

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
在这里插入图片描述

代码说明

dp[] 数组的含义, 以nums[i]元素结尾的递增子序列的最大长度, 但是全局的最大递增子序列长度不一定就是以nums[len-1]的元素结尾, 所有需要遍历整个dp数组来找最大值.

递推公式

dp[i] = Math.max(dp[i], dp[j]+1)

class Solution {public int lengthOfLIS(int[] nums) {int len = nums.length;if(len == 1) return 1;int[] dp = new int[len];Arrays.fill(dp, 1);int maxCount = 0;for(int i = 1; i < len; i++){for(int j = 0; j < i; j++){if(nums[i] > nums[j]) {dp[i] = Math.max(dp[i], dp[j]+1);}maxCount = Math.max(dp[i], maxCount);}}// System.out.println(Arrays.toString(dp));return maxCount;}
}

Leetcode 674. 最长连续递增序列

题目链接

题目说明

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。

代码说明

因为要求是连续的递增序列, 所以只需要比较nums[i] 和 nums[i-1] 即可, 之前的题目是比较nums[i] 和 0~i 的所有元素

class Solution {public int findLengthOfLCIS(int[] nums) {int len = nums.length;int[] dp = new int[len];int maxCount = 1;dp[0] = 1;for(int i= 1; i < len; i++){if(nums[i] > nums[i-1]){dp[i] = dp[i-1] + 1;}else{dp[i] = 1;}maxCount = Math.max(maxCount, dp[i]);}return maxCount;}
}

Leetcode 718. 最长重复子数组

题目链接

题目说明

给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。
在这里插入图片描述

代码说明

这里的dp数组 dp[i][j] 代表的是元素nums1[0:i) 和 nums2[0:j)之间的最大公共数组长度(左闭右开), 这样可以简化代码

class Solution {public int findLength(int[] nums1, int[] nums2) {int l1 = nums1.length, l2 = nums2.length;int[][] dp = new int[l1+1][l2+1];int maxCount =0;for(int i = 1; i <= l1; i++){for(int j = 1; j <=l2; j++){if(nums1[i-1] == nums2[j-1]){dp[i][j] = dp[i-1][j-1] + 1;}if(dp[i][j] > maxCount) maxCount = dp[i][j];}}return maxCount;}
}

否则代码会变长很多, 这里da[i][j] 代表的是nums1[0:i+1)和nums2[0:j+1) 之间的最大公共数组长度(左闭右开),

class Solution {public int findLength(int[] nums1, int[] nums2) {int l1 = nums1.length, l2 = nums2.length;int[][] dp = new int[l1][l2];//initializationfor(int i = 0; i < l1; i++){int count = 0;if(nums1[i] == nums2[0]){count = 1;}dp[i][0] = count;}for(int j = 0; j < l2; j++){int count = 0;if(nums1[0] == nums2[j]){count = 1;}dp[0][j] = count;}int maxCount =0;for(int i = 1; i < l1; i++){for(int j = 1; j < l2; j++){if(nums1[i] == nums2[j]){dp[i][j] = dp[i-1][j-1] + 1;}}}for(int i = 0; i < l1; i++){for(int j = 0; j < l2; j++){maxCount = Math.max(maxCount, dp[i][j]);}}return maxCount;}
}


http://www.ppmy.cn/news/659170.html

相关文章

Stanford点云公开数据集:S3DIS

S3DIS (Stanford Large-Scale 3D Indoor Spaces Dataset) 是斯坦福大学提供的大场景室内3D点云数据集&#xff0c;包含6个教学和办公Area&#xff0c;总共有695,878,620个带有色彩信息以及语义标签的3D点。 该数据集目前已经被包含在一个更大的Full 2D-3D-S Dataset当中&#x…

log4j2 的使用【超详细图文】

log4j2 的使用 Apache Log4j2 是对Log4j 的升级版本&#xff0c;参考了logback 的一些优秀的设计&#xff0c;并且修复了一些问题&#xff0c;因此带来了一些重大的提升&#xff0c;主要有&#xff1a; 异常处理&#xff0c;在logback中&#xff0c;Appender中的异常不会被应…

CentOS8安装Geant4笔记(一):Geant4介绍、编译和安装

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/123320135 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子(红模仿…

Python爬虫 BeautifulSoup(bs4)-- bs4介绍、安装bs4、bs4基础语法

1. BeautifulSoup简介 BeautifulSoup简称&#xff1a; bs4 。什么是BeatifulSoup&#xff1f; BeautifulSoup&#xff0c;和lxml一样&#xff0c;是一个html的解析器&#xff0c;主要功能也是解析和提取数据 。优缺点&#xff1f; 缺点&#xff1a;效率没有lxml的效率高优点&a…

UE4 动画重定向

UE4中&#xff0c;使用动画重定向&#xff0c;对导入的人形骨骼进行修改&#xff0c;并套用引擎中已存在的动画。 一.可用的动画模型 UE4 默认有一套基本的人形骨骼&#xff08;同Unity&#xff09;&#xff0c;一般UE4商城动画都使用Humanoid Rig。 如果商城介绍中&#xf…

【唐老狮】Unity和UE4两大游戏引擎,你该如何选择?

经常被想进入游戏行业的同学问这样一个问题&#xff1a;Unity和UE4学哪个更好&#xff1f;当我面对这样的问题&#xff0c;往往都会先问清楚对方对哪个更感兴趣&#xff0c;然后就引导他学习哪个&#xff0c;投其所好的回答对方的问题&#xff01; 你心里肯定在想&#xff0c;你…

修改UE4的缓存路径

1.首先删除默认的C盘下的缓存&#xff08;路径如下 2.找到config文件&#xff0c;你自己安装UE4的地方&#xff0c;对应的Engine文件下的Config里面的BaseEngine.ini 3.双击打开&#xff0c;定位到IntalledDerviedDataBackendGraph的位置&#xff0c;然后找到Path那一行&#x…

Log4j高危漏洞原理及复现

Log4j高危漏洞原理及复现 漏洞检测||复现环境 查看JDK版本&#xff0c;发现版本小于1.8u121 图3-7 查看JDK版本 查看log4j2版本&#xff0c;发现版本在2.x < 2.14.1内 图3-8 查看log4j2版本 查看代码&#xff0c;发现存在log4j2相关的lookup语句 [外链图片转存失败,源站…