代码随想录算法训练营Day49|300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组

最长递增子序列

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

dp[i]为到当前位置i为止的最长递增子序列的长度,所以dp[nums.size()-1]并不一定是整个数组的最长递增子序列的长度。这里需要注意,但这个dp[i]怎么来的,我确实没想到。。。

由于是到当前位置i为止的最长递增子序列的长度,所以当当前的nums[i]大于先前元素nums[j],

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

dp[i] = 1,当全乱序的情况下,最长递增子序列长度为1,也是初始值。

从前向后遍历,嵌套循环遍历,时间复杂度为O(n^2)。

最后返回的是dp[i]中元素的最大值。

class Solution {
public:int lengthOfLIS(vector<int>& nums) {if (nums.size() == 0) // 如果数组为空返回0return 0; vector<int> dp(nums.size(), 1); // dp[i]将存储以nums[i]结尾的最长递增子序列的长度for (int i = 1; i < nums.size(); i++) { // 遍历nums数组,从第二个元素开始for (int j = 0; j < i; j++) { // 遍历i之前的所有元素if (nums[i] > nums[j]) // 如果当前元素大于j位置的元素dp[i] = max(dp[i], dp[j] + 1); // 更新dp[i]为dp[i]和dp[j]+1中的较大值}}return *max_element(dp.begin(), dp.end()); // 使用*max_element函数找到dp数组中的最大值并返回// 这个最大值就是最长递增子序列的长度}
}; 

此处注意max_element返回的是最大值的迭代器,所以加*号解引用得到值的大小。

算法的时间复杂度为O(n^2),空间复杂度为O(n)。

最长连续递增序列

674. 最长连续递增序列 - 力扣(LeetCode)

此题相比上题简单许多,贪心也很好做,存储一个计数指示,当前元素大于先前元素,指示++,否则,指示为1,最后返回最大的计数值。

用dp思路的话。

dp[i]表示以先前元素到i的连续递增序列的长度,注意这里不考虑最长的情况

如果nums[i] > nums[i-1],dp[i] = dp[i-1]+1,否则dp[i] = 1。

将所有元素初始化为1。

从前向后遍历。

最终返回dp数组的最大值

class Solution { 
public:int findLengthOfLCIS(vector<int>& nums) { // 类的一个公有成员函数,用于计算最长连续递增子序列的长度vector<int> dp(nums.size(), 1); // 创建一个动态数组dp,大小与输入的nums相同,初始化所有值为1// dp[i]将存储以nums[i]结尾的最长连续递增子序列的长度int maxlength = 1; // 初始化最长递增子序列的长度为1for (int i = 1; i < nums.size(); i++) { // 遍历nums数组,从第二个元素开始if (nums[i] > nums[i - 1]) // 如果当前元素大于前一个元素dp[i] = dp[i - 1] + 1; // 则dp[i]等于dp[i-1]加1,表示递增子序列长度增加maxlength = max(dp[i], maxlength); // 更新最长递增子序列的长度}return maxlength; // 返回计算得到的最长连续递增子序列的长度}
};

算法的时间复杂度为O(n),空间复杂度为O(n)。

最长重复子数组

. - 力扣(LeetCode)

具体思路看下面代码随想录的网址链接。

代码随想录 (programmercarl.com)

dp[i][j]表示以nums1[i-1]和nums2[j-1]为结尾的两个数组的最长公共连续子数组的长度。

当nums1[i-1] == nums[j-1]时,dp[i][j] = dp[i-1][j-1] + 1。

dp[0][0] = 0

遍历从i  = 1开始到nums1.size(),j从1到nums2.size(),嵌套循环。这里从1开始的原因在于我们需要比较nums[i-1]和nums[j-1],而其实dp[0][0]是没有意义的,但可以用来推导后续的dp值。

最后返回dp数组中最大值即为两个数组的最长公共连续子数组的长度。

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {// 创建一个二维动态数组dp,用于存储子问题的解// dp[i][j]表示以nums1[i-1]和nums2[j-1]结尾的最长公共连续子数组的长度vector<vector<int>> dp(nums1.size()+1, vector<int>(nums2.size()+1, 0));int result = 0; // 用于存储最终的最长公共连续子数组的长度// 遍历数组nums1和nums2for(int i = 1; i <= nums1.size(); i++){ // 注意i从1开始,i=0没有实质意义for(int j = 1; j <= nums2.size(); j++){ // 同理j也从1开始// 如果当前两个数字相等if(nums1[i-1] == nums2[j-1]){// 更新dp[i][j]为dp[i-1][j-1]加1// 这意味着以nums1[i-1]和nums2[j-1]结尾的最长公共连续子数组的长度// 等于以nums1[i-2]和nums2[j-2]结尾的最长公共连续子数组的长度加1dp[i][j] = dp[i-1][j-1] + 1;}// 如果以nums1[i-1]和nums2[j-1]结尾的最长公共连续子数组的长度大于当前结果// 更新结果为dp[i][j]if(dp[i][j] > result)result = dp[i][j];}}// 返回最终的最长公共连续子数组的长度return result;}
};

时间复杂度是O(nm),其中n和m分别是两个数组的长度。空间复杂度也是O(nm),因为需要一个二维数组来存储所有子问题的解。

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

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

相关文章

基于FreeRTOS+STM32CubeMX+LCD1602+MCP4162(SPI接口)的数字电位器Proteus仿真

一、仿真原理图: 二、仿真效果: 三、STM32CubeMX配置: 1)、SPI配置: 2)、时钟配置: 四、软件部分: 1)、主函数: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : mai…

牛皮的程序猿后端返回值怎么定义

在后端接口封装中&#xff0c;我们一般都会对返回的数据做一个封装&#xff0c;以防止系统出现不可预期的数据结构和类型。比如这样&#xff1a; 结构体 1 {"success": true,"code": 200,"message": "成功","data": {&quo…

MinIO下载和安装(Windows)

1、MinIO下载和安装 | 用于创建高性能对象存储的代码和下载内容 2、在本地硬盘中并新建一个minio文件夹 里面再创建bin文件夹和data文件夹 bin 用于存放下载的minio.exe data 用于存放数据 logs 用于存放日志 3、 编写启动脚本start.bat echo off echo [信息] 运行MinIO文服务…

群智优化:探索BP神经网络的最优配置

群智优化&#xff1a;探索BP神经网络的最优配置 一、数据集介绍 鸢尾花数据集最初由Edgar Anderson测量得到&#xff0c;而后在著名的统计学家和生物学家R.A Fisher于1936年发表的文章中被引入到统计和机器学习领域数据集特征&#xff1a; 鸢尾花数据集包含了150个样本&#…

赶紧收藏!2024 年最常见的操作系统面试题(三)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见的操作系统面试题&#xff08;二&#xff09;-CSDN博客 五、操作系统中的文件系统是如何工作的&#xff1f; 操作系统中的文件系统是一套用于存储、组织和检索文件的系统。它提供了一种结构化的方式来管理存储设备上…

工业软件的分类与选择策略:针对中小企业的实际应用考量

工业软件是现代工业体系的“大脑”&#xff0c;已经渗透到几乎所有工业领域的核心环节&#xff0c;是现代产业之“魂”&#xff0c;是制造强国之重器。工业软件通过优化生产流程、实时监控设备状态、实现自动化控制等功能&#xff0c;可以帮助企业显著提升生产效率和质量&#…

鸿蒙开发系统基础能力:【@ohos.hiTraceMeter (性能打点)】

性能打点 本模块提供了追踪进程轨迹&#xff0c;度量程序执行性能的打点能力。本模块打点的数据供hiTraceMeter工具分析使用。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 impor…

MySQL配置数据库允许大写字母

MySQL 5.7 默认是支持大写字母的&#xff0c;MySQL 8.0则默认不支持&#xff0c;数据库名称默认都是小写&#xff0c;即使输入了大写也会变成小写&#xff0c;如果你希望数据库名称允许大写字母&#xff0c;你可以修改 MySQL 的配置文件实现此操作&#xff1a; 操作步骤 在My…

【宠粉赠书】SQLServer2022:从入门到精通

为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套数据库学习的必备书籍——《SQL Server 2022从入门到精通》。下面我会详细给大家介绍这套图书&#xff0c;文末留有领取方式。 图书介绍 《SQL Server 2022从入门到精通》系统全面地介绍SQL Server 2022数据库应用与开…

Dolphinscheduler Docker部署全攻略

作者| 陈逸飞 Docker部署的目的是在容器中快速启动部署Apache Dolphinscheduler服务。 先决条件 docker-composedocker 使用容器单机部署Dolphinscheduler 请下载源码包apache-dolphinscheduler--src.tar.gz&#xff0c;下载地址&#xff1a;下载 首先确定服务启动所需的…

记录一个Xshell使用中Xmanager...X11转发的提示问题

希望文章能给到你启发和灵感&#xff5e; 如果觉得有帮助的话&#xff0c;点赞关注收藏支持一下博主哦&#xff5e; 阅读指南 一、环境说明1.1 硬件环境1.2 软件环境 二、问题和错误三、解决四、理解和延伸一下 一、环境说明 考虑环境因素&#xff0c;大家适当的对比自己的软硬…

黑马程序员——Spring框架——day08——maven高级

目录&#xff1a; 分模块开发与设计 分模块开发的意义 问题导入模块拆分原则分模块开发&#xff08;模块拆分&#xff09; 问题导入创建Maven模块书写模块代码通过maven指令安装模块到本地仓库&#xff08;install指令&#xff09;依赖管理 依赖传递 问题导入可选依赖 问题导入…

现在还有人想做TIKTOK吗?

近几年大家都说tiktok不好做了&#xff0c;但为何仍有人愿意投身其中&#xff0c;这背后必然隐藏着巨大的商机。 面对激烈的市场竞争和变化无常的用户需求&#xff0c;我们该如何掌控其中的关键呢&#xff1f; 深入了解目标受众&#xff1a;所谓知己知彼&#xff0c;百战不殆…

国内镜像源网址

腾讯&#xff1a;腾讯软件源 (tencent.com) 阿里&#xff1a;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 清华&#xff1a;清华大学开源软件镜像站 | Tsinghua Open Source Mirror

数据结构与算法—空间复杂度详解与示例(C#,C++)

文章目录 1. 数据结构概述2. 空间复杂度的定义及影响因素3. 空间复杂度的区分常数空间复杂度&#xff08;O(1)&#xff09;线性空间复杂度&#xff08;O(n)&#xff09;其他空间复杂度 4. 几种典型数据结构的优缺点分析数组&#xff08;Array&#xff09;链表&#xff08;Linke…

10 种最佳编程字体

1.Commit Mono 这是我目前最喜欢的字体。这是我用来输入这篇文章的字体。作者 Eigil Nikolajsen 于 2023 年使用Fira Code和JetBrains Mono作为灵感开发了它。 Commit Mono 清晰易读&#xff0c;可配置性强。您可以根据粗细&#xff08;我更喜欢最细的 300&#xff09;、连字、…

联发科MT6775(Helio P70)_MTK6775处理器规格参数_处理器资料

联发科MT6775(Helio P70)采用了台积电12nm工艺制程八核处理器&#xff0c;由4颗 Arm Cortex-A73 2.1GHz 4颗Arm Cortex-A53 2.0GHz组成。其GPU为ARM Mali-G72 MP3&#xff0c;运行时高达900MHz&#xff0c;比上一代Helio P60效能提升了13%。 值得注意的是&#xff0c;联发科MT…

Charles抓包工具系列文章(四)-- Rewrite 重写工具

一、背景 这是一款比Map Local/Remote 还强大的工具&#xff0c;更加灵活&#xff0c;体现在以下几点&#xff1a; 重写request报文重写response报文header 字段的增删改query param 字段的增删改重写 body 字段改写http 响应状态status重写host/url/path 从这也可以看出其强…

R语言——数据与运算

练习基本运算&#xff1a; v <- c(2,4,6,9)t <- c(1,4,7,9)print(v>t)print(v < t)print(v t)print(v!t)print(v>t)print(v<t) v <- c(3,1,TRUE,23i)t <- c(4,1,FALSE,23i)print(v&t)print(v|t)print(!v)v <- c(3,0,TRUE,22i)t <- c(1,3,T…

android imageview setImageResource vector xml ANR 怎么解决

在Android开发中&#xff0c;使用 ImageView 设置矢量图资源&#xff08;vector XML&#xff09;时&#xff0c;可能会遇到ANR&#xff08;应用无响应&#xff09;的情况。这个问题通常是因为矢量图的解析和绘制可能需要较多的时间&#xff0c;特别是对于复杂的矢量图。 以下是…