DAY53 1143.最长公共子序列 + 1035.不相交的线 + 53. 最大子序和

news2025/2/22 17:49:57

1143.最长公共子序列

题目要求:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。

一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。

若这两个字符串没有公共子序列,则返回 0。

示例 1:

  • 输入:text1 = "abcde", text2 = "ace"
  • 输出:3
  • 解释:最长公共子序列是 "ace",它的长度为 3。

思路

这里不要求子序列是连续的。

dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]。这样能够简化数组在第一行和第一列的初始化逻辑。

主要就是两大情况: text1[i - 1] 与 text2[j - 1]相同,text1[i - 1] 与 text2[j - 1]不相同

如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = dp[i - 1][j - 1] + 1;

如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。

即:dp[i][j] = max(dp[i - 1][j], dp[i][j - 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]);
}
class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        vector<vector<int>> dp(text1.size() + 1, vector<int>(text2.size() + 1, 0));
        for (int i = 1; i <= text1.size(); ++i) {
            for (int j = 1; j <= text2.size(); ++j) {
                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[text1.size()][text2.size()];
    }
};

1035.不相交的线

题目要求:我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。

现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] == B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。

以这种方法绘制线条,并返回我们可以绘制的最大连线数。

思路

直线不能相交,这就是说明在字符串A中 找到一个与字符串B相同的子序列,且这个子序列不能改变相对顺序,只要相对顺序不改变,链接相同数字的直线就不会相交。

这么分析完之后,大家可以发现:本题说是求绘制的最大连线数,其实就是求两个字符串的最长公共子序列的长度!所以直接copy代码就可以了。

  • 时间复杂度: O(n * m)
  • 空间复杂度: O(n * m)

53. 最大子序和

题目要求:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

  • 输入: [-2,1,-3,4,-1,2,1,-5,4]
  • 输出: 6
  • 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

思路

dp[i]:包括下标i(以nums[i]为结尾)的最大连续子序列和为dp[i]

dp[i]只有两个方向可以推出来:

  • dp[i - 1] + nums[i],即:nums[i]加入当前连续子序列和
  • nums[i],即:从头开始计算当前连续子序列和

一定是取最大的,所以dp[i] = max(dp[i - 1] + nums[i], nums[i]);

根据dp[i]的定义,很明显dp[0]应为nums[0]即dp[0] = nums[0]。

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

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

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

相关文章

Android图片压缩插件

今天才发现这个还有插件&#xff0c;平时都是传网站上压缩完了又下载下来覆盖原文件。现在有这个了&#xff0c;开发好高效&#x1f601;&#xff01;分享给大家&#xff0c;可能对你们有用哈哈&#x1f606;。也可能你们早都知道了……

信息系统项目管理师(第四版)教材精读思维导图-第十五章到二十四章

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 ​ 思维导图源文件下载链接&#xff1a; 十五章风险管理 十六章采购管理 十七章干系人管理…

如何驾驭逻辑、形式逻辑与AI算法?

逻辑错误与逻辑形式错误是有区别的&#xff1a; 逻辑错误经常表现为没有逻辑因果&#xff0c;用辩证法、阴谋论和统计归纳替代因果演绎&#xff1b;而逻辑形式错误是&#xff1a;前提是形式和内容需要分离&#xff0c;就像数学与语文分开&#xff0c;数学代表形式&#xff0c;…

技术贴 | SQL 执行 - 执行器优化

本期技术贴主要介绍查询执行引擎的优化。查询执行引擎负责将 SQL 优化器生成的执行计划进行解释&#xff0c;通过任务调度执行从存储引擎里面把数据读取出来&#xff0c;计算出结果集&#xff0c;然后返回给客户。 在关系型数据库发展的早期&#xff0c;受制于计算机 IO 能力的…

SLF4J: Class path contains multiple SLF4J bindings.

问题截图 问题原因 这里就是由于hbase 安装路径下的一个文件和hadoop安装路径下的文件起冲突了 解决办法 我的路径&#xff1a; 这个一定要看自己电脑上的路径 /usr/local/hbase/lib/client-facing-thirdparty/ slf4j-log4j12-1.7.25.jar更名为&#xff1a; /usr/local/hb…

手把手带你学习 JavaScript 的 ES6 ~ ESn

文章目录 一、引言二、了解 ES6~ESn 的新特性三、掌握 ES6~ESn 的用法和实现原理四、深入挖掘和拓展《深入理解现代JavaScript》编辑推荐内容简介作者简介精彩书评目录 一、引言 JavaScript 是一种广泛使用的网络编程语言&#xff0c;它在前端开发中扮演着重要角色。随着时间的…

Python | 机器学习之聚类算法

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《人工智能奇遇记》&#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 目录结构 1. 机器学习之聚类算法概念 1.1 机器学习 1.2 聚类算法 2. 聚类算法 2.1 实验目的…

基于Vue+SpringBoot的天然气工程业务管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四、数据库设计4.1 用户表4.2 分公司表4.3 角色表4.4 数据字典表4.5 工程项目表4.6 使用材料表4.7 使用材料领用表4.8 整体E-R图 五、系统展示六、核心代码6.1 查询工程项目6.2 工程…

MAT工具定位分析Java堆内存泄漏问题方法

原创/朱季谦 一、MAT概述与安装 MAT&#xff0c;全称Memory Analysis Tools&#xff0c;是一款分析Java堆内存的工具&#xff0c;可以快速定位到堆内泄漏问题。该工具提供了两种使用方式&#xff0c;一种是插件版&#xff0c;可以安装到Eclipse使用&#xff0c;另一种是独立版…

Kibana:作为非设计师设计直观的 Kibana 仪表板

作者&#xff1a;Carly Richmond, Marco Vettorello, Giovanni Magni 开发人员、SRE 工程师和才华横溢的技术人员通常需要构建快速仪表板来展示有关其应用程序状态的重要信息&#xff0c;这些信息可供混合受众使用。 如果你不是前端开发人员或设计师&#xff0c;那么构建所有人…

【Mysql】MySQL基于成本的优化

什么是成本 我们之前说 过MySQL 执行一个查询可以有不同的执行方案&#xff0c;它会选择其中成本最低&#xff0c;或者说代价最低的那种方案去真正的执行查询。那么成本是怎么计算的呢&#xff0c;其实在 MySQL 中一条查询语句的执行成本是由下边这两个方面组成的: I/O 成本 …

【Linux】Linux基础IO(下)

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;Linux &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【Linux】…

JVM 内存区域

JVM内存结构模型 程序计数器&#xff1a; 1.线程私有的&#xff0c;是一块较小的内存空间&#xff0c;当前线程所执行的字节码的行号指示器 2.每个线程都有一个独立的程序计数器&#xff0c;各线程之间程序计数器互不影响&#xff0c;独立存储 3.此内存区域是唯一一个在java虚拟…

u系 kdump查看配置

V4 桌面&#xff1a; 如果能上外网配置网络源安装软件包&#xff1a; 会自动安装以下几个包&#xff08;不能连接外网直接安装一下几个包即可&#xff09;&#xff1a; 查看kdump配置&#xff1a; Kdump-config show 可以看到USE_KDUMP1 &#xff0c;生成的vmcore文件在/var…

4种互斥机制比较

4种互斥机制 关中断禁止任务切换信号量互斥信号量 关中断 关中断&#xff08;Disable Interrupts&#xff09;&#xff1a;通过禁用中断来实现互斥。在关中断期间&#xff0c;任何中断请求都会被忽略&#xff0c;从而确保了临界区的独占性。然而&#xff0c;这种方法会导致系统…

【软考篇】中级软件设计师 第二部分(二)

中级软件设计师 第二部分&#xff08;二&#xff09; 十三. 死锁问题十四. 段页式存储14.1 页式存储14.1.1 缺页中断14.1.2 页面置换算法 14.2 段式存储14.3 段页式存储 十五. 索引文件十六. 文件目录16.1 树形目录结构16.2 位示图 十三. 死锁问题 多刷题 系统不可能发生死锁的…

⑨【MySQL事务】事务开启、提交、回滚,事务特性ACID,脏读、幻读、不可重复读。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MySQL事务 ⑨【事务】1. 事务概述2. 操作事务3…

面试经典(6/150)轮转数组

面试经典&#xff08;6/150&#xff09;轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 以下为自己的思路&#xff0c;我不明白最终的返回值为什么有误&#xff0c;好像是题目里要求原地解决问题&#xff0c;而我创…

Live800:客服行业的发展历程及未来前景

随着信息技术和互联网的高速发展&#xff0c;客服行业也在不断变革和发展。客服行业是一个服务型的行业&#xff0c;其发展历程也与人们对服务需求的变化密切相关。本文将介绍客服行业的发展历程和未来前景。 客服行业的发展历程 20世纪70年代&#xff0c;客服行业主要以电话服…

【开源】基于Vue.js的校园二手交易系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、功能模块2.1 数据中心模块2.2 二手商品档案管理模块2.3 商品预约管理模块2.4 商品预定管理模块2.5 商品留言板管理模块2.6 商品资讯管理模块 三、实体类设计3.1 用户表3.2 二手商品表3.3 商品预约表3.4 商品预定表3.5 留言表3.6…