代码随想录算法训练营第五十五天 | 动态规划 part 12 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

目录

  • 300.最长递增子序列
    • 思路
    • 代码
  • 674. 最长连续递增序列
    • 思路
    • 代码
  • 718. 最长重复子数组
    • 思路
    • 代码

300.最长递增子序列

Leetcode

在这里插入图片描述

思路

  1. dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度
  2. 递推公式:if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1)
  3. 初始化:每一个i,对应的dp[i](即最长递增子序列)起始大小至少都是1.
  4. 顺序:从前往后

代码

class Solution:def lengthOfLIS(self, nums: List[int]) -> int:dp = [1 for _ in range(len(nums))]res = 0for i in range(len(nums)):for j in range(i):if nums[i] > nums[j]:dp[i] = max(dp[i], dp[j] + 1)res = max(res, dp[i])return res
  • 时间复杂度: O(n^2)
  • 空间复杂度: O(n)

674. 最长连续递增序列

Leetcode

在这里插入图片描述

思路

本题和上题类似,区别在于连续,所以在遍历的时候只需要比较nums[i]和nums[i-1]即可。

递推公式为 if (nums[i] > nums[i - 1]) dp[i] = max(dp[i], dp[i - 1] + 1)

贪心
这道题目也可以用贪心来做,也就是遇到nums[i] > nums[i - 1]的情况,count就++,否则count为1,记录count的最大值就可以了。

代码

class Solution:def findLengthOfLCIS(self, nums: List[int]) -> int:dp = [1 for _ in range(len(nums))]res = 1for i in range(1, len(nums)):if nums[i] > nums[i - 1]:dp[i] = max(dp[i], dp[i - 1] + 1)res = max(res, dp[i])return res
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

718. 最长重复子数组

Leetcode

在这里插入图片描述

思路

寻找两个数组中最长的 公共 连续子序列

  1. dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。 (特别注意: “以下标i - 1为结尾的A” 标明一定是 以A[i-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[i][0] 和dp[0][j]要初始值,因为 为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1, 所以dp[i][0] 和dp[0][j]初始化为0。
  4. 顺序:从前往后
  5. 举例推导:A: [1,2,3,2,1],B: [3,2,1,4,7]为例:
    在这里插入图片描述

代码

class Solution:def findLength(self, nums1: List[int], nums2: List[int]) -> int:dp = [[0] * (1 + len(nums1)) for _ in range(len(nums2) + 1)]res = 0for i in range(1, len(nums2) + 1):for j in range(1, len(nums1) + 1):if nums2[i - 1] == nums1[j - 1]:dp[i][j] = dp[i - 1][j - 1] + 1res = max(res, dp[i][j])return res
  • 时间复杂度: O(n × m),n 为A长度,m为B长度
  • 空间复杂度: O(n × m)

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

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

相关文章

面试总结之Spring篇

一、AOP 1、什么是AOP 1.1、概述 AOP(Aspect-Oriented Programming):面向切面编程,即把一些业务逻辑中的相同代码抽取出来,让业务逻辑更加简练清爽 如果要CRUD写一堆业务,可如何实现业务代码前后进行打印…

计算机竞赛 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的驾…

WebSocket的那些事(6- RabbitMQ STOMP目的地详解)

目录 一、目的地类型二、Exchange类型目的地三、Queue类型目的地四、AMQ Queue类型目的地五、Topic类型目的地 一、目的地类型 在上节 WebSocket的那些事(5-Spring STOMP支持之连接外部消息代理)中我们已经简单介绍了各种目的地类型,如下图&…

【强化算法专题一】双指针算法

【强化算法专题一】双指针算法 1.双指针算法--移动零2.双指针算法--复写零3.双指针算法--快乐数4.双指针算法--盛水最多的容器5.双指针算法--有效三角形的个数6.双指针算法--和为s的两个数7.双指针算法--三数之和8.双指针算法--四数之和 1.双指针算法–移动零 算法原理解析----…

java开发岗位面试

java开发岗位面试 技术栈:springboot框架+redis 个人笔试/技术面问题整理 1、SpringBoot有什么组件? 举例说几个: ①auto-configuration组件:核心特征。其约定大于配置思想,赋予了SpringBoot开箱即用的强…

Maven-DskipTests和-Dmaven.test.skip=true的区别

DskipTeststrue和-Dmaven.test.skiptrue的区别 1、 -DskipTeststrue 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下,如: mvn clean package -DskipTeststrue2、 -Dmaven.test.skiptrue 完全忽略测试代码的…

maui 开发AMD CPU踩的坑。

刚换的 amd R7735HS 笔记本,8核16线程,32GB内存。性能得实强悍 。 当需要发布iOS版本时发现,我没有macos ,那就安装个vmware 吧。看了一下Apple 要求以后的发布的APP需要以xcode14.3或以后版本开发的版本,但xcode14.3…

oracle 乱码(编码为AMERICAN_AMERICA.US7ASCII)问题解决

案例 :mysql数据同步到oracle 注意: 不要使用navicat,navicat有自己的编码,使用plsql客户端查看数据,plsql客户端与oracle编码保持一致即可 service类 本地用的多数据源 com.baomidou dynamic-datasource-spring-boot…

c++内存对齐

原文在这里。https://blog.csdn.net/WangErice/article/details/103598081 但是内容有错误。我在自己的这里修改并变成红色了。 内存在使用过程并不是单一的依次排列,而是按照某种既定的规则来进行对齐,以方便快速访问.内存的对齐原则有以下三条&#…

深度学习与python theano

文章目录 前言1.人工神经网络2.计算机神经网络3.反向传播4.梯度下降-cost 函数1.一维2.二维3.局部最优4.迁移学习 5. theano-GPU-CPU theano介绍1.安装2.基本用法1.回归2.分类 3.function用法4.shared 变量5.activation function6.Layer层7.regression 回归例子8.classificatio…

【JavaScript】读取本地json文件并绘制表格

本文为避免跨域问题,使用了改造过的本地json文件的方法实现读取json数据并绘制表格。 如果发起http请求获取本地 json文件中数据,需要架设本地服务器,本文不做阐述。 概述 1、json在本地,并不需要从服务器下载。 2、采用jquery…

国庆作业day5

应用层:提供用户与网络应用程序之间的接口。表示层:负责数据的格式转换、加密和解密。会话层:负责建立、管理和终止会话。它提供会话控制和同步,允许应用程序之间建立连接和交换数据。传输层:提供端到端的连接。网络层…

postgresql-管理数据表

postgresql-管理数据表 创建表数据类型字段约束表级约束模式搜索路径 修改表添加字段删除字段添加约束删除约束修改字段默认值修改字段数据类型重命名字段重命名表 删除表 创建表 在 PostgreSQL 中,使用 CREATE TABLE 语句创建一个新表: CREATE TABLE …

专业PDF编辑阅读工具PDF Expert mac中文特点介绍

PDF Expert mac是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 PDF Expert mac软件特点 PDF编辑:PDF Expert提供了丰富的PDF编辑功能,包括添加、删除、移动、旋转、缩放、裁剪等操作…

树莓派4B与STM32串口通信

目录 2上篇文章的补充 2.1 树莓派通信设置 3树莓派与STM32通信 3.1接线准备 3.2代码 3.2.1 STM32代码: 3.2.2树莓派代码: 2上篇文章的补充 2.1 树莓派通信设置 在上篇文章的基础上,进一步的设置 终端输入:sudo minicom …

v-for中的key

在Vue中,当使用v-for指令循环渲染元素时,添加:key是一个推荐做法,尤其是在循环的元素可能会被重新排序、添加或删除的情况下。 :key的作用是为每个循环的元素提供一个唯一的标识符,以便Vue能够跟踪和管理这些元素的状态。Vue使用…

从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 核心类持久化存储

文章目录 一、持久化存储的方式与路径二、公共模块序列化 / 反序列化异常规定 三、持久化存储数据库数据管理文件数据管理读写规定新增 /删除规定内存中 Message 的规定存储规定代码编写 硬盘数据管理 一、持久化存储的方式与路径 交换机,队列,绑定关系,这些我们使用数据库来管…

四、浏览器渲染过程,DOM,CSSDOM,渲染,布局,绘制详细介绍

知识点: 1、为什么不能先执行 js文件?? 我们不能先执行JS文件,必须等到CSSOM构建完成了才能执行JS文件,因为前面已经说过渲染树是需要DOM和CSSOM构建完成了以后才能构建,而且JS是可以操控CSS样式的&#…

编程前置:处理Excel表格,定位单元格位置,输入文字前,让AI机器人知道我说什么

原提问: input输入表头 (input内除了/,空格 回车 标点符号等 全部作为单元格分隔符) 由我设置input输入的是行or列 给选项 1. 行 2. 列 默认回车或没输入值是列由我设置起始位置行列 例如 3,2 表示3行2列 当我输入3,2 就表示在第…

【Java】继承练习

继承的思想实现猫和狗的案例,并在测试类中进行测试 猫和狗——共同特性都是属于动物 1. 定义动物类(Animal) 成员变量:姓名,年龄构造方法:无参,带参成员方法:get/set 方法 2. 定义猫…