Day45: 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

news2024/11/22 21:51:40

目录

300.最长递增子序列

思路 

674. 最长连续递增序列 

思路 

718. 最长重复子数组 

思路 


300.最长递增子序列

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

 

思路 

1. 确定dp数组及其下标含义 

        dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 

2. 状态转移方程

if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);

3. dp数组初始化 

        每一个i,对应的dp[i](即最长递增子序列)起始大小至少都是1. 

4. 确定遍历顺序 

        dp[i] 是有0到i-1各个位置的最长递增子序列 推导而来,那么遍历i一定是从前向后遍历。 

for (int i = 1; i < nums.size(); i++) {
    for (int j = 0; j < i; j++) {
        if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);
    }
    if (dp[i] > result) result = dp[i]; // 取长的子序列
}

5. 举例推导dp数组 

300.最长上升子序列

class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        if (nums.size() <= 1) return nums.size();
        vector<int> dp(nums.size(), 1);
        int result = 0;
        for (int i = 1; i < nums.size(); i++) {
            for (int j = 0; j < i; j++) {
                if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);
            }
            if (dp[i] > result) result = dp[i]; // 取长的子序列
        }
        return result;
    }
};
  • 时间复杂度: O(n^2)
  • 空间复杂度: O(n)

674. 最长连续递增序列 

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

 

思路 

1. 确定dp数组及其下标含义 

        dp[i]:以下标i为结尾的连续递增的子序列长度为dp[i]。

2. 确定递推公式

dp[i] = dp[i - 1] + 1;

3. dp数组初始化 

        dp[i]初始为1。

4. 确定遍历顺序 

        从递推公式上可以看出, dp[i + 1]依赖dp[i],所以一定是从前向后遍历 

for (int i = 1; i < nums.size(); i++) {
    if (nums[i] > nums[i - 1]) { // 连续记录
        dp[i] = dp[i - 1] + 1;
    }
}

5. 举例推导dp数组 

674.最长连续递增序列

class Solution {
public:
    int findLengthOfLCIS(vector<int>& nums) {
        if (nums.size() == 0) return 0;
        int result = 1;
        vector<int> dp(nums.size() ,1);
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] > nums[i - 1]) { // 连续记录
                dp[i] = dp[i - 1] + 1;
            }
            if (dp[i] > result) result = dp[i];
        }
        return result;
    }
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

718. 最长重复子数组 

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

 

思路 

1. 确定dp数组及其下标含义 

        dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。 (特别注意: “以下标i - 1为结尾的A” 标明一定是 以A[i-1]为结尾的字符串 ) 

2. 确定递推方程 

dp[i][j] = dp[i - 1][j - 1] + 1;

3. dp数组初始化 

        dp[i][0] 和dp[0][j]初始化为0。 

4. 确定遍历顺序 

        外层for循环遍历A,内层for循环遍历B。 

for (int i = 1; i <= nums1.size(); i++) {
    for (int j = 1; j <= nums2.size(); j++) {
        if (nums1[i - 1] == nums2[j - 1]) {
            dp[i][j] = dp[i - 1][j - 1] + 1;
        }
        if (dp[i][j] > result) result = dp[i][j];
    }
}

5.  举例推导dp数组

718.最长重复子数组

class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> dp (nums1.size() + 1, vector<int>(nums2.size() + 1, 0));
        int result = 0;
        for (int i = 1; i <= nums1.size(); i++) {
            for (int j = 1; j <= nums2.size(); j++) {
                if (nums1[i - 1] == nums2[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                }
                if (dp[i][j] > result) result = dp[i][j];
            }
        }
        return result;
    }
};
  • 时间复杂度:O(n × m),n 为A长度,m为B长度
  • 空间复杂度:O(n × m)

笔记参考:代码随想录 

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

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

相关文章

【每日运维】判断服务器时间同步是否正常

对于 ntpd 服务 ntpq -premote&#xff1a;时间同步源的 IP 地址或域名refid&#xff1a;参考 ID&#xff0c;它是一个代表时间源的唯一标识符st&#xff1a;层级&#xff0c;表示时间同步源的层级关系。较低的层级意味着更接近原子钟的时间源t&#xff1a;状态&#xff0c;表…

uni-app:script中设置的data,在界面的显示(包含图片src为data中的数据该如何展示),以及控制台的输出

样式&#xff1a; 两个图标的区别&#xff1a; 第一个图标是图片文件直接在文件夹static中展示 前台代码展示&#xff1a; <image class"logo" src"/static/logo.png"></image> 第二个图标是从服务器端进行的引用 在script中的data中进行的设…

【C++修炼之路】stl 中的容器适配器

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录 一、stack二、queue三、deque四、priority_queue1、仿函数2、实现 如果无聊的话&#xff0c;就来逛逛 我的博客栈 吧! &#x1…

从新手到大师:优雅的Vim熟练之旅(万文详解)

从新手到大师&#xff1a;优雅的Vim熟练之旅 博主简介一、前言1.1、Vim编辑器的重要性和流行性1.2、目标 二、Vim简介2.1、什么是Vim2.2、历史和背景简介2.3、Vim的优势和适用场景 三、安装和设置Vim3.1、下载和安装Vim编辑器3.2、基本配置&#xff1a;.vimrc文件的重要性和常用…

Spinger ESE独立出版|2023年第二届能源与环境工程国际会议(CFEEE 2023)

会议简介 Brief Introduction 2023年第二届能源与环境工程国际会议(CFEEE 2023) 会议时间&#xff1a;2023年9月1日-3日 召开地点&#xff1a;中国三亚 大会官网&#xff1a;CFEEE 2023-2023 International Conference on Frontiers of Energy and Environment Engineering 由I…

leetcode 491. 递增子序列

2023.7.23 本题本质上也是要选取递归树中的满足条件的所有节点&#xff0c;而不是选取叶子节点。 故在将符合条件的path数组放入ans数组后&#xff0c;不要执行return。 还一点就是这个数组不是有序的&#xff0c;并且也不能将它有序化&#xff0c;所以这里的去重操作不能和之前…

MyBatis框架提供的分页助手插件pagehelper

使用MyBatis框架提供的分页助手插件可以很方便地实现分页查询。以下是一个基于MyBatis分页助手插件完成分页查询的示例&#xff1a; 1.首先&#xff0c;确保在项目的依赖中添加了MyBatis分页助手插件的依赖&#xff0c;例如&#xff1a; <dependency><groupId>co…

【C语言】getchar和putchar函数详解:字符输入输出的利器

目录 &#x1f4cc;getchar函数 ▪️ 函数原型&#xff1a; ▪️ 目的&#xff1a; ▪️ 返回值&#xff1a; ▪️ 用法&#xff1a; &#x1f4cc;putchar函数 ▪️ 函数原型&#xff1a; ▪️ 目的&#xff1a; ▪️ 参数&#xff1a; ▪️ 返回值&#xff1a; ▪…

20 QTreeWidget控件

代码&#xff1a; //treeWidget树控件//1&#xff1a;设置头部标签 QStringList()匿名对象创建ui->treeWidget->setHeaderLabels(QStringList()<<"英雄"<<"英雄介绍");//2&#xff1a;设置itemQTreeWidgetItem * liItem new QTreeWidg…

刘铁猛C#教程笔记——操作符

C#语言中的操作符 表中位于同一行的操作符优先级相同&#xff0c;从上到下优先级依次减弱&#xff1b; 操作符的用法举例 成员访问运算符——“.”&#xff1a;用于访问类中的成员或者访问位于某个名空间中的类&#xff0c;如&#xff1a; using System; using System.Collec…

Unity进阶--fsm状态机的使用笔记

文章目录 Unity进阶--fsm状态机的使用笔记第一种用基础的if播放实现动画控制switch--case实现状态机使用状态机 Unity进阶–fsm状态机的使用笔记 第一种用基础的if播放实现动画控制 朴实无华&#xff0c;简单易懂&#xff0c;但是耦合性太差。 switch–case实现状态机 写对应…

【JAVA】云HIS系统功能菜单知识(二)

随着医疗信息化和互联网技术的不断发展&#xff0c;云HIS在大数据管理和应用的优势日益凸显。对于医疗机构而言&#xff0c;云HIS平台可以帮助其实现更高效的医疗服务管理&#xff0c;并提高医疗服务的整体水平和效率。 一、系统管理 1.医院信息 基本信息、法人代表、主要负责…

IntelliJ IDEA2023中利用maven-archetype-quickstart模板创建项目无src文件夹及maven插件下载过慢问题的解决

目录 介绍问题之解决问题2的解决问题1的解决 介绍 昨天下载并安装了IntelliJ IDEA 2023的最新版&#xff08;以下简称为IDEA 2023&#xff09;&#xff0c;学习利用该IDE编写Java项目及将其与maven结合构建项目。我所安装的maven是去年暑假安装的&#xff0c;版本为Apache Mav…

【架构基础】架构概念

软件架构产生的背景 1972年图灵奖获得者、荷兰计算机科学家Edsger Wybe Dijkstra早在20世纪60年代就开始涉及软件架构概念了。 20世纪60年代第一次软件危机引出了结构化编程&#xff0c;创造了模块的概念。 20世纪80年代第二次软件危机引出了面向对象编程&#xff0c;创造了…

Flask的send file和send_from_directory的区别

可以自行查看flask 文档。 send file高效&#xff1b; send from directory安全&#xff0c;且适用于静态资源交互。 都是实现相同的功能的。 send_file send_from_directory

所有docker命令无效,解决办法

目录 ■前言 今天使用docker时&#xff0c;所有命令无效 ■解决办法如下 1.停止docker服务 2.查看状态 3.删除之前的docker相关的文件 4.再次查看状态 5.使用相关命令 &#xff08;好用了&#xff09; 6.重新下载镜像 ■前言 今天使用docker时&#xff0c;所有命令无…

MySQL 8.0 OCP (1Z0-908) 考点精析-备份与恢复考点1:MySQL Enterprise Backup概要

文章目录 MySQL 8.0 OCP (1Z0-908) 考点精析-备份与恢复考点1&#xff1a;MySQL Enterprise Backup概要MySQL Enterprise Backup下载与安装MySQL Enterprise Backup的备份过程MySQL Enterprise Backup的优势mysqlbackup 客户端例题例题1 &#xff1a; MySQL Enterprise Backup概…

idea的插件FastRequest,比postman更好用

1.安装插件Restful Fast Request 在插件plugin中直接搜索Restful Fast Request,然后点击install安装 2.使用插件 插件位置在右面&#xff0c;点开后呈现以下页面 配置项目名和环境 选择配置好的项目名和环境 启动项目后可以看到接口的小火箭&#xff0c;点击小火箭 3.…

【配置环境】Windows下 VS Code 远程连接虚拟机Ubuntu

一&#xff0c;环境 Windows 11 家庭中文版VMware Workstation 16 Pro &#xff08;版本&#xff1a;16.1.2 build-17966106&#xff09;ubuntu-22.04.2-desktop-amd64 二&#xff0c;关键步骤 Windows下安装OpenSSHVS Code安装Remote - SSH插件 三&#xff0c;详细步骤 在Ubun…

sentinel深入讲解流量控制/熔断降级

文章目录 sentinelsentinel介绍重要的核心概念引入依赖限流的规则熔断规则yaml 项目配置使用注解 SentinelResource讲解类的静态方法 sentinel sentinel介绍 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构…