代码随想录第52天|300.最长递增子序列 718. 最长重复子数组

news2024/11/28 16:54:04

300.最长递增子序列 

300. 最长递增子序列 - 力扣(LeetCode)

代码随想录 (programmercarl.com)

动态规划之子序列问题,元素不连续!| LeetCode:300.最长递增子序列_哔哩哔哩_bilibili

给你一个整数数组 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[i] 的定义:dp[i] 表示i之前包括i的以nums[i]结尾的最长递增子序列的长度;

2、状态转移方程:if(nums[i] > nums[j])  dp[i] = max(dp[i], dp[j] + 1)

3、dp数组如何初始化:dp[i] 至少包括nums[i],初始化为1;

4、确定遍历顺序:从前向后遍历;

5、举例推导dp数组:以[0,1,0,3,2]为例:

综合代码:

class Solution {
    public int lengthOfLIS(int[] nums) { // 定义一个名为 Solution 的类,其中有一个名为 lengthOfLIS 的公共方法,接受一个整数数组 nums 作为参数,返回一个整数
        int[] dp = new int[nums.length]; // 创建一个长度与 nums 相同的整数数组 dp,用于记录以每个位置 i 结尾的最长上升子序列的长度
        int res = 1; // 初始化结果变量为 1,因为最短的上升子序列长度至少为 1
        Arrays.fill(dp, 1); // 将 dp 数组初始化为 1,表示每个位置上的元素都可以作为一个长度为 1 的子序列
        for (int i = 1; i < dp.length; i++) { // 遍历数组 dp,从第二个位置开始
            for (int j = 0; j < i; j++) { // 在当前位置 i 之前的位置 j 进行遍历
                if (nums[i] > nums[j]) { // 如果当前位置的元素 nums[i] 大于位置 j 的元素 nums[j],说明可以将位置 i 加入到位置 j 的子序列中,形成一个更长的子序列
                    dp[i] = Math.max(dp[i], dp[j] + 1); // 更新以位置 i 结尾的最长上升子序列的长度,取当前长度 dp[i] 与位置 j 的子序列长度加 1 中的较大值
                }
                res = Math.max(res, dp[i]); // 更新整体结果,取当前结果 res 与以位置 i 结尾的最长上升子序列长度 dp[i] 中的较大值
            }
        }
        return res; // 返回最终结果
    }
}

718. 最长重复子数组 

718. 最长重复子数组 - 力扣(LeetCode)

代码随想录 (programmercarl.com)

动态规划之子序列问题,想清楚DP数组的定义 | LeetCode:718.最长重复子数组_哔哩哔哩_bilibili

给两个整数数组 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]。该公式表明我们在遍历dp[i][j]的时候,i和j都要从1开始。

2、确定递推公式:当A[i-1]=B[i-1], dp[i][j] = dp[i-1][j-1] + 1;

3、dp数组如何初始化:根据dp[i][j] 的定义,dp[i][0] 和dp[0][j] 都是没有意义的,但是为了方便为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1;将dp[i][0] 和dp[0][j] 初始化为0。

4、确定遍历顺序:外层for循环遍历A,内层for循环遍历B,在遍历的时候顺便把dp[i][j]的最大值记录下来。

5、举例推导dp数组:拿示例1中,A: [1,2,3,2,1],B: [3,2,1,4,7]为例:

综合代码:

// 版本一
class Solution {
    // 定义一个方法,参数是两个整数数组,目的是找到这两个数组中相同的元素序列的最大长度
    public int findLength(int[] nums1, int[] nums2) {
        // 初始化结果为0
        int result = 0;
        // 创建一个二维数组 dp 用于存储子问题的解,其大小为 nums1.length + 1 行,nums2.length + 1 列
        int[][] dp = new int[nums1.length + 1][nums2.length + 1];
        
        // 遍历 nums1 数组
        for (int i = 1; i < nums1.length + 1; i++) {
            // 遍历 nums2 数组
            for (int j = 1; j < nums2.length + 1; j++) {
                // 如果 nums1[i - 1] 与 nums2[j - 1] 相等
                if (nums1[i - 1] == nums2[j - 1]) {
                    // 则更新 dp[i][j] 为 dp[i - 1][j - 1] + 1
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                    // 更新结果为当前结果和 dp[i][j] 中的较大值
                    result = Math.max(result, dp[i][j]);
                }
            }
        }
        
        // 返回最终结果
        return result;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1650114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xmind的13个快捷方式

1.新建导图 CtrlshiftN 2.编辑文字 空格键 3.插入图片 Ctrli 4. 插入主题 Enter键 5. 插入主题之前 ShiftEnter键 6. 插入子主题 Tab键 7. 放大导图 “Ctrl”“” 8. 缩小导图 “Ctrl”“-” 9. 复制 CtrlInsert 10. 粘贴 Shift Insert 11. 剪切 ShiftDelete 12. 截图 F7 13. 保…

神经网络怎么把隐含层变量融合到损失函数中?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Unity初级---初识生命周期

1. Awake() &#xff1a;唤醒函数&#xff0c;最先执行的函数&#xff0c;只执行一次&#xff0c;当脚本文件挂载的对象被激活时调用 2. OnEnable() &#xff0c;OnDisable()&#xff1a;当脚本启用和禁用时触发&#xff0c;可执行多次&#xff0c;触发的前提是脚本挂载的对象…

SolidWorks进行热力学有限元分析一、模型建立

1.话不多说按照我的操作来 2.这一步鼠标移到中心点直接拉就行 3.这里选单位&#xff0c;继续按照操作来 4.选中这个边&#xff0c;直接拉&#xff0c;输入尺寸后确定&#xff0c;其他边同理 5.鼠标右键设置厚度 6.右键零件&#xff0c;然后编辑材料&#xff0c;给他赋予你需要的…

纯血鸿蒙APP实战开发——折叠屏扫描二维码方案

折叠屏扫描二维码方案 介绍 本示例介绍使用自定义界面扫码能力在折叠屏设备中实现折叠态切换适配。自定义界面扫码使用系统能力customScan&#xff0c;其提供相机流的初始化、启动扫码、识别、停止扫码、释放相机流资源等能力。折叠屏折叠状态通过监听display的foldStatusCha…

【论文阅读】Fuzz4All: Universal Fuzzing with Large Language Models

文章目录 摘要一、介绍二、Fuzz4All的方法2.1、自动提示2.1.1、自动提示算法2.1.2、自动提示的例子2.1.3、与现有自动提示技术的比较 2.2、fuzzing循环2.2.1、模糊循环算法2.2.2、Oracle 三、实验设计3.1、实现3.2、被测系统和baseline3.3、实验设置以及评估指标 四、结果分析4…

Qt | QComboBox(组合框)

01、上节回顾 Qt 基础教程合集02、QComBox 一、QComboBox 类(下拉列表、组合框) 1、QComboBox 类是 QWidget 类的直接子类,该类实现了一个组合框 2、QComboBox 类中的属性 ①、count:const int 访问函数:int count() const; 获取组合框中的项目数量,默认情况下,对于空…

nginx 负载均衡、反向代理实验

nginx 负载均衡、反向代理实验 实验目的 理解概念&#xff1a;明确反向代理和负载均衡的基本概念及其在网络架构中的作用。 掌握技能&#xff1a;学习如何配置Nginx以实现反向代理和负载均衡功能。 实践应用&#xff1a;通过实际操作&#xff0c;体验Nginx如何提升Web服务的可…

246 基于matlab的交流电机动态方程

基于matlab的交流电机动态方程&#xff0c;用于交流电机动态分析。输入电机的额定功率(kW)、电机的额定转速(r/min)、转子外径(m)、铁心长(m)转子槽数、电机极对数 等参数&#xff0c;输出转速变化、力矩变化等结果。程序已调通&#xff0c;可直接运行。 246 交流电机动态 转速…

一堆自定义C#代码片段,让你开发效率飞涨

SharpBoxes 是一款用于 Visual Studio 的扩展&#xff0c;作者为本人&#xff1b; 该扩展旨在提高开发效率。它为开发人员提供了一组日常使用频率较高的代码片段&#xff0c;让你在编写代码时能够更快地插入常用的代码段。通过安装这个扩展&#xff0c;你可以使用快捷键轻松插…

笔记本连接不上远程桌面,笔记本无法连接远程桌面的可能原因及解决方法

在使用远程桌面功能时&#xff0c;笔记本无法成功连接的情况可能由多种原因引起。为了有效地解决这个问题&#xff0c;我们需要逐一排查这些可能的原因&#xff0c;并采取相应的解决措施。 首先&#xff0c;网络连接稳定性是远程桌面连接成功的关键。请确保笔记本和远程计算机之…

【数据结构】链表经典OJ题目练习(2)

面试题 02.02. 返回倒数第 k 个节点 - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;先计算出链表的长度&#xff0c;在将链表中的值存在数组中&#xff0c;在返回第k个节点。 思路2&#xff1a;利用快慢指针&#xff0c;先让快指针走k步&#xff0c;在让快慢指针分…

北京大学-知存科技存算一体联合实验室揭牌,开启知存科技产学研融合战略新升级

5月5日&#xff0c;“北京大学-知存科技存算一体技术联合实验室”在北京大学微纳电子大厦正式揭牌&#xff0c;北京大学集成电路学院院长蔡一茂、北京大学集成电路学院副院长鲁文高及学院相关负责人、知存科技创始人兼CEO王绍迪、知存科技首席科学家郭昕婕博士及企业研发相关负…

谷歌推出10门免费AI课程,无需教科书及费用

谷歌面向小白以及开发者分别推出了不同的AI课程~ 包含初级、中级和高级。课程章节大致包括&#xff1a;&#xff08;含教学视频、参考材料、测验&#xff09; 基础入门&#xff1a;45分钟深入了解生成式AI 简单实操&#xff1a;30分钟掌握大语言模型 了解如何释放生成式 AI S…

02-Fortran基础--Fortran操作符与控制结构

02-Fortran基础--Fortran操作符与控制结构 0 引言1 操作符1.1 数学运算符1.2 逻辑运算符1.3 关系运算符 2 控制流程2.1 条件结构2.2 循环结构2.3 分支结构 0 引言 运算符和控制流程对编程语言是必须的,Fortran的操作符和控制流程涉及到各种数学运算符、逻辑运算符以及控制结构。…

学习云计算亚马逊云科技AWS的6大教科书神级别免费网站

亚马逊☁️(AWS)是全球云行业最&#x1f525;火云平台&#xff0c;云行业的就业机会和市场前景都非常巨大&#xff0c;现在通过学AWS去转云会是个千载难逢的好机会。小李哥这次来盘点学习AWS的6大教科书级免费官方网站(免费课程&#xff0b;动手实验)。欢迎大家点击图片左下角加…

栈的实现以及c语言解决括号匹配问题

一、栈的实现 1、头文件 typedef int STDataType; typedef struct Stack {STDataType* _a;int _top; // 栈顶int _capacity; // 容量 }Stack; // 初始化栈 void StackInit(Stack* ps); // 入栈 void StackPush(Stack* ps, STDataType data); // 出栈 void StackPop(S…

C语言内存函数memcpy与memmove

一.memcpy的使用和模拟实现 1.函数原型 void* memcpy(void* destination, const void* source, size_t num); destination是目标内存块的指针 source是源内存块的指针 num是要复制的字节数 .函数memcpy从source的位置开始向后复制 num个字节 的数据到destination指向的内存位置…

无人零售,重塑购物新纪元

在这个快节奏的时代&#xff0c;科技的每一次跃进都在悄无声息地改变着我们的生活方式。而今&#xff0c;无人零售正以雷霆之势&#xff0c;颠覆传统购物模式&#xff0c;为我们带来前所未有的便捷与智能体验。想知道无人零售如何彻底改变我们的购物方式吗&#xff1f;跟随我&a…

2024五一劳动节活动策划方案

2024五一劳动节打工人青松游园大会&#xff08;劳动节放青松主题&#xff09;活动策划方案-51P.pptx 活动策划信息&#xff1a; 方案页码&#xff1a;51页 文件格式&#xff1a;PPT 方案简介&#xff1a; 劳动是世界上最伟大的事 所以我们该把一些劳动留给明天&#xff0…