代码随想录算法训练营第五十三天|1143.最长公共子序列 1035.不相交的线 53. 最大子序和

news2024/11/14 3:33:12

文档讲解:代码随想录

视频讲解:代码随想录B站账号

状态:看了视频题解和文章解析后做出来了

1143.最长公共子序列

class Solution:
    def longestCommonSubsequence(self, text1: str, text2: str) -> int:
        dp = [[0] * (len(text2) + 1) for _ in range(len(text1) + 1)]

        for i in range(1, len(text1) + 1):
            for j in range(1, len(text2) + 1):
                if text1[i-1] == text2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1])

        return dp[len(text1)][len(text2)]
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n)

1. 确定dp数组的含义

dp[i] 为下标范围为0到i+1之间,最长的自增序列的长度。

2. 确定递推公式

因为本题规定了自增序列可以不连续,所以我们不能只和前一个元素对比,而是和所有前面的元素对比,如果大于前面的某个元素,就在那个元素的基础上+1,当然我们要一直保留最大值。

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

其中i是当前元素,j是i之前的某个元素。

3. dp数组初始化

因为我们要返回的是长度,而每个元素单独长度已经为1了,所以所有元素都先初始化为1。

4. 确定遍历顺序

递推公式中的j是i之前的元素下标,所以从前往后递推。

5. 举例

1035.不相交的线

class Solution:
    def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:
        dp = [[0] * (len(nums2) + 1) for _ in range(len(nums1) + 1)]

        for i in range(1, len(nums1) + 1):
            for j in range(1, len(nums2) + 1):
                if nums1[i-1] == nums2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1])

        return dp[len(nums1)][len(nums2)]
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n)

和前一题完全一样,改个变量名直接ac了。

53. 最大子序和

class Solution(object):
    def maxSubArray(self, nums):
        dp = [0] * len(nums)
        dp[0] = nums[0]

        for i in range(1, len(nums)):
            dp[i] = max(dp[i-1] + nums[i], nums[i])

        return max(dp)
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n)

1. 确定dp数组的含义

dp[i] 为下标范围为 0 到 i 之间的最大子序和。

2. 确定递推公式

两种情况:

第一种:取当前元素和上一个元素的最大子序和

第二种:不考虑之前元素,把当前元素当作起始点

通过比较这两个值定义dp[i]的值。第二种的逻辑在于,如果当前元素的值都已经大于之前最大子序和 + 当前元素,那么之前子序和一定是负的,对于找到最大子序一定没有帮助,那么还不如从当前元素开始另起一个子序。

3. dp数组初始化

dp[0]初始化为第一个元素的值,从第二个元素开始遍历。

4. 确定遍历顺序

递推公式需要之前的元素下标,所以从前往后递推。

5. 举例

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

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

相关文章

【云原生 Prometheus篇】Prometheus的动态服务发现机制

自动发现 一、Prometheus服务发现 理论部分1.1 Prometheus数据采集配置1.2 基于文件的服务发现1.3 基于consul的服务发现1.4 基于 Kubernetes API 的服务发现1.4.1 概念1.4.2 部分配置参数1.4.3 配置模板 二、实例一:部署基于文件的服务发现2.1 创建用于服务发现的文…

【pandas数据处理】数据结构

数据结构 Series基于列表创建数据结构自定义元素的行标签基于字典创建数据结构 DataFrame对象基于列表创建数据结构设置参数来定义行列标签基于字典 Series 一维数组对象,不仅包含数据元素,还包含一组与数据元素对应的行标签。 基于列表创建数据结构 …

2023年【制冷与空调设备安装修理】考试报名及制冷与空调设备安装修理考试资料

题库来源:安全生产模拟考试一点通公众号小程序 制冷与空调设备安装修理考试报名考前必练!安全生产模拟考试一点通每个月更新制冷与空调设备安装修理考试资料题目及答案!多做几遍,其实通过制冷与空调设备安装修理模拟试题很简单。…

上市公司-股权性质数据(国企、央企)2003-2022年

上市公司-股权性质数据(国企、央企)是一个针对上市公司的数据集,主要涵盖了A股公司股权性质的详细信息,区分了公司是否为民营企业、国企或央企。这份数据集提供了每家上市公司的股权结构背景,对投资者、市场分析师和经…

深度学习卷积神经网络参数计算难点重点

目录 一、卷积层图像输出尺寸 二、池化层图像输出尺寸 三、全连接层输出尺寸 四、卷积层参数数量 五、全连接层参数数量 六、代码实现与验证 以LeNet5经典模型为例子并且通道数为1 LeNet5网络有7层: ​ 1.第1层:卷积层 ​ 输入:原始的图片像素…

简答的体系架构分析

背景 一点体系架构的分析 体系架构图

单片机、ARM、嵌入式开发、Android 底层开发有什么关系?

单片机、ARM、嵌入式开发、Android 底层开发有什么关系? 从我目前的见识来看: 单片机是个系统(比如:51、AVR、PLC...),其中包含了去除了输入输出之外的运算器、控制器、存储器,我们用程序可以非…

文献速递:人工智能(AI)用于神经学家:数字神经元会梦见电子羊吗?

这篇文章详细讨论了人工智能(AI)在神经学领域的应用及其对医疗保健行业的深远影响。主要内容可以分为以下几个部分: **1.AI和机器学习的基础知识:**文章首先解释了AI的基本概念,回顾了从最初的基于规则的方法到当前的…

【经典小练习】简单的文件加密解密

文章目录 🌹什么是文件加密⭐应用场景 🛸案例🌺描述🌺代码 🌹什么是文件加密 Java文件加密是指使用Java编程语言和相关的加密算法对文件进行加密处理。通过这种方式,可以将文件内容转换为一种非常规的形式…

金融机构如何高效率考勤?这个技巧帮了大忙!

在现代社会,随着科技的不断发展,人脸识别技术作为一种高效、便捷的身份验证手段,逐渐应用于各个领域,其中之一便是人脸考勤系统。 传统的考勤方式存在一系列问题,如卡片打卡容易被冒用、签到表容易造假等,而…

「首届广州百家新锐企业」名单出炉!数说故事遴选入围

11月20日,由中共广州市委统战部、市工商联、市工信局、市国资委、市科技局联合主办的首届广州百家新锐企业融通创新交流会在广州成功举办。 为推动广州市中小民营企业的创新发展,践行新发展理念,厚植广州产业根基,现场发布首届广…

Mac Ubuntu双系统解决WiFi和WiFi 5G网络不可用问题

文章目录 设备信息1. Ubuntu WiFi不可用解决方式查看Mac的网卡型号根据网卡型号搜索获取到的解决方法查看WiFi名字问题参考链接 2. 解决WiFi重启后失效问题打开终端创建.sh脚本文件编辑脚本文件复制粘贴脚本修改脚本权限创建并编辑systemd service文件复制粘贴下文到systemd se…

百度搜索框中的下拉提示关键词提取

效果图 代码有点多,绑定资源了 导出excel如下 贴心养眼背景图鼠标点击小爱心

c语言判断三角形

以下是一个用C语言编写的程序&#xff0c;用于判断输入的三个数能否构成三角形。 #include <stdio.h>int main() { int a, b, c; printf("请输入三角形的三条边长&#xff1a;\n"); scanf("%d%d%d", &a, &b, &c); if (a b…

【​用运算放大器设计恒流电流源电压4V-74V适应范围 ​】2021-11-29

缘由用运算放大器设计恒流电流源-编程语言-CSDN问答直流恒流源设计&#xff0c;要求用到运算放大器-硬件开发-CSDN问答求助恒流驱动电路&#xff0c;运放端口电压的问题&#xff1f; - 电路设计论坛 - 电子技术论坛 - 广受欢迎的专业电子论坛!(不能实现恒流坏的电路设计反面例子…

mac 修改 hosts 文件

打开 hosts 所在文件夹 command shift G 快捷键 输入&#xff1a;“/private/etc/hosts” 后回车 如下所示 进入 hosts 文件所在位置&#xff0c;找到 hosts 文件&#xff0c;双击打开 修改 hosts 文件 将所需要的配置信息追加到hosts 文件中&#xff0c;或者修改需要改…

数据结构与算法【哈希表】的Java实现

目录 介绍 实现哈希表 大体框架 实现数组扩容 实现查询key 实现新增元素 实现删除元素 哈希算法 String中重写的hashCode()方法 介绍 哈希表也叫散列表&#xff0c;哈希表是一种数据结构&#xff0c;它提供了快速的插入操作和查找操作&#xff0c;无论哈希表总中有多…

Flink 常用物理分区算子(Physical Partitioning)

Flink 物理分区算子(Physical Partitioning) 在Flink中&#xff0c;常见的物理分区策略有&#xff1a;随机分配(Random)、轮询分配(Round-Robin)、重缩放(Rescale)和广播(Broadcast)。 接下来&#xff0c;我们通过源码和Demo分别了解每种物理分区算子的作用和区别。 (1) 随机…

数组题目: 665. 非递减数列、453. 最小移动次数使数组元素相等、283. 移动零、189. 旋转数组、396. 旋转函数

665. 非递减数列 题解&#xff1a; 题目要求一个非递减数列&#xff0c;我们可以考虑需要更改的情况&#xff1a; nums {4, 2, 5} 对于这个nums&#xff0c;由于2的出现导致非递减&#xff0c;更改的情况就是要么4调到<2&#xff0c;要么2调到4,5. nums {1, 4, 2, 5} …

从Redis反序列化UserDetails对象异常后发现FastJson序列化的一些问题

最近在使用SpringSecurityJWT实现认证授权的时候&#xff0c;出现Redis在反序列化userDetails的异常。通过实践发现&#xff0c;使用不同的序列化方法和不同的fastJson版本&#xff0c;异常信息各不相同。所以特地记录了下来。 一、项目代码 先来看看我项目中redis相关配置信息…