杭州营销型网站建设滁州网站建设

云南北宸电力电子设备有限公司 2026/09/09 19:33:20

300.最长递增子序列

文章讲解/视频讲解

题目描述:

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

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

示例 1:

  • 输入:nums = [10,9,2,5,3,7,101,18]
  • 输出:4
  • 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

  • 输入:nums = [0,1,0,3,2,3]
  • 输出:4

示例 3:

  • 输入:nums = [7,7,7,7,7,7,7]
  • 输出:1

提示:

  • 1 <= nums.length <= 2500
  • -10^4 <= nums[i] <= 104

思路:
1.dp数组及其下标含义:这是本题的重中之重,本题的dp[i]表示i之前包括nums[i]结尾的最长递增子序列

2.状态转移方程:位置i的最长递增序列,等于 j 从 0 到 i - 1的最长递增序列 + 1(位置i本身),也就是我们去找最大的dp[j] + 1,

if (nums[i] > nums[j]) {

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

}

3.dp数组的初始化:所有位置最开始起码都是1,所以全部初始化为1

4.确定遍历顺序:本题一共有两层for循环,外层遍历i,内层遍历j,外层遍历的i是一定要从小到大遍历的,要不然拿不到前面的数据,内层的j无所谓从前还是从后,只要是0到i - 1这个范围就行了

5.举例推导dp数组

输入:[0,1,0,3,2],dp数组的变化如下:

如果代码写出来,但一直AC不了,那么就把dp数组打印出来,看看对不对!

代码示例:

function lengthOfLIS(nums: number[]): number { const length: number = nums.length const dp: number[] = new Array(length).fill(1) let res: number = 0 for (let i = 0; i < length; i++) { for (let j = 0; j < i; j++) { if (nums[i] > nums[j]) { dp[i] = Math.max(dp[i], dp[j] + 1) } } res = Math.max(res, dp[i]) } return res };

674.最长连续递增数列

文章讲解/视频讲解

题目描述:

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

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

示例 1:

  • 输入:nums = [1,3,5,4,7]
  • 输出:3
  • 解释:最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。

示例 2:

  • 输入:nums = [2,2,2,2,2]
  • 输出:1
  • 解释:最长连续递增序列是 [2], 长度为1。

提示:

  • 0 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9

思路:

本题相比上一题其实跟像退阶版本,因为连续意味着我们不必比较nums[j]和nums[i],只需要比较nums[i]和nums[i -1]的大小即可

1.确定dp数组及其下标含义:dp[i]表示以i为结尾的连续递增子序列为dp[i]

2.确定递推公式:如果 nums[i] > nums[i - 1],那么以 i 为结尾的连续递增的子序列长度 一定等于 以i - 1为结尾的连续递增的子序列长度 + 1 。即:dp[i] = dp[i - 1] + 1

3.dp数组的初始化:虽然是连续递增子序列,但是每个序列开始时起码都为1,依旧全部初始化为1

4.确定遍历顺序:由于dp[i]依赖于dp[i - 1],所以一定是从前往后遍历的

5.举例推导dp数组

已输入nums = [1,3,5,4,7]为例,dp数组状态如下:

注意这里要取dp[i]里的最大值,所以dp[2]才是结果!

代码示例:

function findLengthOfLCIS(nums: number[]): number { const length: number = nums.length const dp: number[] = new Array(length).fill(1) let res: number = 1 for (let i = 1; i < length; i++) { if (nums[i] > nums[i - 1]) { dp[i] = dp[i - 1] + 1 } res = Math.max(res, dp[i]) } return res };

718.最长重复子数组

文章讲解/视频讲解

题目描述:

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

示例:

输入:

  • A: [1,2,3,2,1]
  • B: [3,2,1,4,7]
  • 输出:3
  • 解释:长度最长的公共子数组是 [3, 2, 1] 。

提示:

  • 1 <= len(A), len(B) <= 1000
  • 0 <= A[i], B[i] < 100

思路:
本题我们考虑用一个二维数组记录两个字符串,这样就能轻松比较二者重复字母

1.确定dp数组及其下标含义:dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。 (特别注意: “以下标i - 1为结尾的A” 标明一定是 以A[i-1]为结尾的字符串 ),注意这里这么写了就表示dp数组就一定是从dp[1][1]开始的

2.确定递推公式:

根据dp[i][j]的定义,dp[i][j]的状态只能由dp[i - 1][j - 1]推导出来。

即当A[i - 1] 和B[j - 1]相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1;

3.dp数组的初始化:按照dp数组的定义来讲,dp[0][0]其实没有意义,你总不能是以下标-1为结尾的A数组吧。但是为了遍历能正常进行,我们还是把dp[0][0]设置成0,只有这样dp[1][1]才能等于dp[0][0] + 1,后续的dp数组也才能够递增下去

4.确定遍历顺序:本题外层放a还是b其实无所谓,最重要的确保双层循环即可,而且从前往后遍历

5.举例推导dp数组

拿示例1中,A: [1,2,3,2,1],B: [3,2,1,4,7]为例,画一个dp数组的状态变化,如下:

代码示例:

function findLength(nums1: number[], nums2: number[]): number { const length1: number = nums1.length const length2: number = nums2.length const dp: number[][] = new Array(length1 + 1).fill(0).map(_ => new Array(length2 + 1).fill(0)) let res: number = 0 for (let i = 1; i <= length1; i++) { for (let j = 1; j <= length2; j++) { if (nums1[i - 1] === nums2[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1 res = Math.max(dp[i][j], res) } } } return res };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

广州 网站建设部门网站建设

第一章:视觉测试工具的演进与行业需求随着前端技术的飞速发展和用户对界面体验要求的不断提升,视觉测试逐渐成为保障软件质量的关键环节。传统的功能测试难以捕捉界面渲染差异、布局偏

2026/06/30 12:47:03

网站建设需求建设电商网站

GraalPy 终极实践指南:3步打造高性能Python应用【免费下载链接】graalpythonA Python 3 implementation built on GraalVM项目

2026/06/30 13:44:37

免费网站建设廊坊网站建设

Qwen3-VL在STEM与数学推理中的卓越表现:多模态因果分析实战在智能教育平台日益普及的今天,一个现实问题反复浮现:学生上传了一道附带手绘图的几何题截图&

2026/06/30 11:02:53

重庆网站建设电器网站建设

摘要:本文聚焦定制开发开源AI智能名片S2B2C商城小程序,深入探讨产品经理在该项目中的职责与发展。通过分析产品经理在需求分析、功能设计、用户反馈处理、影响分析以及功能价值

2026/06/30 12:42:02

电器网站建设网站建设 上海

你是否曾经为AI模型推理时的漫长等待而烦恼?当用户同时发送多个请求时,你的服务是否频繁出现响应超时?本文将通过实战案例,为你揭秘如何在Swift

2026/06/30 10:25:20

胶州网站建设睢宁网站建设

还在为做PPT熬夜加班?这些工具能让你事半功倍。又到了月底汇报的时候,看着电脑屏幕上杂乱无章的文档和空白PPT,小张叹了口气。内容其实早就准备好了࿰

2026/06/30 13:46:07

合川网站建设长春网站建设

Ubuntu系统实用技巧大揭秘1. 文件与文件夹操作1.1 添加注释在Ubuntu系统中,任何文件或文件夹都可以添加注释。操作步骤如下:1. 右键单击文件或文件夹。2. 从弹出菜单中选择“属性”。3.

2026/06/30 14:17:39

肇庆网站建设台州网站建设

在价值链中,所有的ToB和ToG都是为ToC服务的”——是一个极具哲学高度和系统思维的洞察。这句话看似简单,却触及了现代经济运行的本质逻辑:一切价值最终都归于

2026/06/30 13:55:07

建设网站制作永康网站建设

不依赖Photoshop!纯AI驱动的老照片修复解决方案来了在家庭相册的某个角落,泛黄的老照片静静躺着——祖辈的婚礼、儿时的街景、早已消失的建筑……这些影像承载着记忆&#x

2026/06/30 13:41:07