当前位置: 首页 > news >正文

代码随想录打卡第五十五天|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

300.最长递增子序列

**题目:**给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。
在这里插入图片描述

题目链接:300.最长递增子序列
解题思路:
dp数组的含义:以nums[i]结尾的最长递增子数组
所以当该序列以nums[i] 结尾时,遍历nums的0至i-1
当该数字nums[j]小于nums[i] 证明可以以nums[i] 结尾 此时dp[i]=dp[j]+1
因为有多个满足条件的nums[j],取最大值
递推公式为:
dp[i]=Math.max(dp[i],dp[j]+1);
最终的最大值不一定以nums[nums.length-1]结尾,所以需要维护一个int类型的max
代码如下:

class Solution {public int lengthOfLIS(int[] nums) {if(nums.length==1){return 1;}//dp[n]含义 以nums[n-1]为结尾的严格递增子序列长度int n=nums.length;int[] dp=new int[n];dp[0]=1;Arrays.fill(dp, 1);int res = 0;for(int i=1;i<n;i++){//递推公式//遍历i前面的数确定是否加入数组for(int j=0;j<i;j++){if(nums[j]<nums[i]){dp[i]=Math.max(dp[i],dp[j]+1);}}res = Math.max(res, dp[i]);}return res;            }
}

674. 最长连续递增序列

代码如下:

  public static int findLengthOfLCIS(int[] nums) {int[] dp = new int[nums.length];for (int i = 0; i < dp.length; i++) {dp[i] = 1;}int res = 1;//可以注意到,這邊的 i 是從 0 開始,所以會出現和卡哥的C++ code有差異的地方,在一些地方會看到有 i + 1 的偏移。for (int i = 0; i < nums.length - 1; i++) {if (nums[i + 1] > nums[i]) {dp[i + 1] = dp[i] + 1;}res = res > dp[i + 1] ? res : dp[i + 1];}return res;}

718. 最长重复子数组

题目:给两个整数数组 nums1 和 nums2 ,返回 两个数组中 公共的 、长度最长的子数组的长度 。
示例 1:
输入:nums1 = [1,2,3,2,1], nums2 = [3,2,1,4,7]
输出:3
解释:长度最长的公共子数组是 [3,2,1] 。
示例 2:
输入:nums1 = [0,0,0,0,0], nums2 = [0,0,0,0,0]
输出:5
题目链接: 718. 最长重复子数组
解题思路:
1.dp数组的含义 数组【0-nums[i-1]】与【0-nums[j-1]】的最长公共后缀
2.递推公式 即当A[i - 1] 和B[j - 1]相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1;
3.为什么要记录最大值 因为要求的是最长数组的公共子序列,最长公共后缀不一定是最长公共数组产生的
代码如下:

class Solution {public int findLength(int[] nums1, int[] nums2) {int result = 0;int[][] dp = new int[nums1.length + 1][nums2.length + 1];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;result = Math.max(result, dp[i][j]);}}}return result;}
}
http://www.lryc.cn/news/212354.html

相关文章:

  • C# 创建Oceanbase ODBC数据源 DSN
  • C++ 常用函数汇总#include<algorithm>(3万字总结)
  • Google Archive Patch 基础应用代码记录
  • 机器学习——代价敏感错误率与代价曲线
  • 如何利用 ChatGPT 提升编程技能
  • ChatGPT:@EqualsAndHashCode(callSuper = false)是什么意思
  • docker部署的mariadb忘记密码
  • 一体化模型图像去雨+图像去噪+图像去模糊(图像处理-图像复原-代码+部署运行教程)
  • [java/力扣110]平衡二叉树——优化前后的两种方法
  • 吉他、班卓琴和贝斯吉他降分器:Arobas Music Guitar 8.1.1
  • cocos tilemap的setTileGIDAt方法不实时更新
  • 机器学习---使用 TensorFlow 构建神经网络模型预测波士顿房价和鸢尾花数据集分类
  • 铁合金电炉功率因数补偿装置设计
  • 表格识别软件:科技革新引领行业先锋,颠覆性发展前景广阔
  • 【Redis】高并发分布式结构服务器
  • 微信小程序拍照页面自定义demo
  • 单目标应用:进化场优化算法(Evolutionary Field Optimization,EFO)求解微电网优化MATLAB
  • 推荐算法面试
  • 长图切图怎么切
  • 动手学深度学习 - 学习环境配置
  • 洛谷 B2004 对齐输出 C++代码
  • seccomp学习 (1)
  • Linux指令【上】
  • RK3568-clock
  • 新恶意软件使用 MSIX 软件包来感染 Windows
  • 干货!数字IC后端入门学习笔记
  • 力扣:144. 二叉树的前序遍历(Python3)
  • 【数据挖掘 | 数据预处理】缺失值处理 重复值处理 文本处理 确定不来看看?
  • 二叉树问题——前/中/后/层遍历(递归与栈)
  • Nor Flash和Nand Flash的区别——笔记