leetcode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

news2025/1/16 23:58:25

1143. 最长公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

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

  • 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

示例 1:

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

示例 2:

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

示例 3:

输入:text1 = "abc", text2 = "def"
输出:0
解释:两个字符串没有公共子序列,返回 0 。
思路:

        /*

            dp[i][j]表示到text1[i-1]和到text[j-1]的最长公共子序列长度

            if(text1[i]==text2[j])dp[i][j] = dp[i-1][j-1]+1;

            else

            dp[i][j] = max(dp[i-1][j],dp[i][j-1]);

            初始化为0

            遍历顺序 从左到右,从上到下

            打印dp数组

        */

代码:
class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        /*
            dp[i][j]表示到text1[i-1]和到text[j-1]的最长公共子序列长度
            if(text1[i]==text2[j])dp[i][j] = dp[i-1][j-1]+1;
            else
            dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
            初始化为0
            遍历顺序 从左到右,从上到下
            打印dp数组
        */
        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. 不相交的线

在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。

现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:

  •  nums1[i] == nums2[j]
  • 且绘制的直线不与任何其他连线(非水平线)相交。

请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。

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

示例 1:

输入:nums1 = [1,4,2], nums2 = [1,2,4]
输出:2
解释:可以画出两条不交叉的线,如上图所示。 
但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。

示例 2:

输入:nums1 = [2,5,1,2,5], nums2 = [10,5,2,1,5,2]
输出:3

示例 3:

输入:nums1 = [1,3,7,1,7,5], nums2 = [1,9,2,5,1]
输出:2
思路:

        /*

            本题就是求最长公共子序列

            dp[i][j]表示到nums1[i-1]和到nums2[j-1]的最长公共子序列

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

            初始化为0

            遍历顺序 从左到右,从上到下

            打印dp数组

        */

代码:
class Solution {
public:
    int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
        /*
            本题就是求最长公共子序列
            dp[i][j]表示到nums1[i-1]和到nums2[j-1]的最长公共子序列
            dp[i][j] = dp[i-1][j-1];
            初始化为0
            遍历顺序 从左到右,从上到下
            打印dp数组
        */
        vector<vector<int>>dp(nums1.size()+1,vector<int>(nums2.size()+1,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;
                }
                else
                {
                    dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
                }
            }
        }
        return dp[nums1.size()][nums2.size()];
    }
};

53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例 1:

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

示例 2:

输入:nums = [1]
输出:1

示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

思路:

        /*

            dp[i]表示数组下标到i的连续子数组的最大和

            dp[i] = max(dp[i-1]+nums[i],nums[i]);

            初始化为0;

            遍历顺序 从前到后

            打印dp数组

        */

代码:
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        /*
            dp[i]表示数组下标到i的连续子数组的最大和
            dp[i] = max(dp[i-1]+nums[i],nums[i]);
            初始化为0;
            遍历顺序 从前到后
            打印dp数组
        */
        if(nums.size()==1) return nums[0];
        vector<int>dp(nums.size()+1,0);
        int result = nums[0];
        dp[0] = nums[0];
        for(int i =1;i<nums.size();i++)
        {
            dp[i] = max(dp[i-1]+nums[i],nums[i]);
            result = max(dp[i],result);
        }
        return result;
    }
};

还有很多瑕疵,还需继续坚持!

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

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

相关文章

【ajax】withCredentials

默认值&#xff1a;false。在获取同域资源时设置 withCredentials 没有影响。 true&#xff1a;在跨域请求时&#xff0c;会携带用户凭证 false&#xff1a;在跨域请求时&#xff0c;不会携带用户凭证&#xff1b;返回的 response 里也会忽略 cookie ajax中的作用 跨域请求时…

药物滥用第一篇介绍

AMP&#xff1a; Ampicillin&#xff0c;中文名氨苄青霉素&#xff0c;同义名氨苄西林&#xff0c;一种β-内酰胺类抗生素&#xff0c;属于青霉素家族的一员&#xff0c;化学式为C16H19N3O4S&#xff0c;可治疗多种细菌感染。 氨苄西林为半合成的广谱青霉素&#xff08;结构如上…

基于单片机设计的家用自来水水质监测装置

一、前言 本文介绍基于单片机设计的家用自来水水质监测装置。利用STM32F103ZET6作为主控芯片&#xff0c;结合水质传感器和ADC模块&#xff0c;实现对自来水水质的检测和监测功能。通过0.96寸OLED显示屏&#xff0c;将采集到的水质数据以直观的方式展示给用户。 随着人们对健…

Unity DOTS World Entity ArchType Component EntityManager System概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面地几个关键概念&#xff0c;方便大家上手学习掌握Unity DOTS开发。 Unity DOTS 中所有的Entities 都是被放到World世界中。每个Entity在它所在的World里面有唯一不同的ID号来区分。DOTS项目中可以同时有多个World。每个W…

04 接口隔离原则

官方定义 <<代码整洁之道>>作者罗伯特 C马丁 为 “接口隔离原则” 的定义是&#xff1a;客户端不 应该被迫依赖于它不使用的方法&#xff08;Clients should not be forced to depend on methods they do not use&#xff09;。 该原则还有另外一个定义&#xff1…

【Proteus仿真】【STM32单片机】太阳能追光系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶、光敏传感器、PCF8591 ADC模块、按键模块、28BYJ48步进电机驱动模块、直流电机模块等。 主要功能&#xff1a; 系统运行后&#x…

网络工程师知识点6

91、3、IP ABC类私有地址和个数 A类私有地址1个&#xff1a;10.0.0.0/8 B类私有地址16个&#xff1a;172.16.0.0~172.31.0.0/16 C类私有地址256个&#xff1a;192.168.0.0~192.168.255.0/24 92、拥塞管理机制的实现过程分为哪两步&#xff1f; 第一步&#xff1a;将准备从一个…

MATLAB中sos2tf函数用法

目录 语法 说明 示例 二阶节系统的传递函数表示 sos2tf函数的功能是将数字滤波器的二阶节&#xff08;section&#xff09;数据转换为传递函数形式。 语法 [b,a] sos2tf(sos) [b,a] sos2tf(sos,g) 说明 [b, a] sos2tf(sos) 返回由 sos 描述的离散时间系统的传递函数系…

璟丰机电丨Parker派克江苏代理商 供应高品质驱动器和电机产品

苏州璟丰机电有限公司是一家专注于工业自动化领域的系统集成商&#xff0c;为客户提供非标自动化系统的设计研发、量身定做、批量生产等非标自动化解决方案&#xff0c;并代理这世界一流品牌的美国Parker派克。 派克Parker是全球领先的运动和控制技术与系统多元化制造商&#…

Minio 文件上传(后端处理同文件判断,同一文件秒传)

记录minio 文件上传 MinIO提供多个语言版本SDK的支持&#xff0c;下边找到java版本的文档&#xff1a; 地址&#xff1a;https://docs.min.io/docs/java-client-quickstart-guide.html maven依赖如下&#xff1a; XML <dependency><groupId>io.minio</groupId…

openHarmony新建项目及本地模拟机配置

新建项目 新建项目 选择空模板 选择一个非中文路径 在新建项目过程中可能会存在杀毒软件报病毒信息&#xff0c;建议退出退出杀毒软件 直到右侧窗口出现 Previewer预览选项&#xff0c;证明项目搭建完成 相关常用文件及文件夹解析 实时预览 调整预览设备类型 …

CSS3 渐变

CSS3 渐变可以让你在两个或多个指定的颜色之间显示平稳的过渡。 CSS3渐变有两种类型&#xff1a;线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial Gradients&#xff09;。 线性渐变&#xff08;Linear Gradients&#xff09;&#xff1a; 线性…

数据抓取代码示例

以下是一个使用lua-http和Lua编写的爬虫程序&#xff0c;用于爬取内容。此程序使用了https://www.duoip.cn/get_proxy的代码。 -- 引入lua-http库 local http require "http" ​ -- 定义get\_proxy函数 local function get_proxy()-- 使用https://www.duoip.cn/get…

idea jrebel热部署插件免费激活

介绍 jrebel是一款热部署的插件 idea上原生是不支持热部署的&#xff0c;一般更新了 Java 文件后要手动重启 Tomcat 服务器&#xff0c;才能生效&#xff0c;我们可以使用jrebel来热部署。 安装jRebel 在plugin中&#xff0c;选中marketplace&#xff0c;搜索jrebel&#x…

Window 窗口函数 (Spark Sql)

在 Spark SQL 中&#xff0c;Window 函数是一种用于在查询结果集中执行聚合、排序和分析操作的强大工具。它允许你在查询中创建一个窗口&#xff0c;然后对窗口内的数据进行聚合计算。 import org.apache.spark.sql.expressions.Window import org.apache.spark.sql.functions…

AnHookd Hook

1.Hook Hook译为“钩子”&#xff0c;就是在事件传送到终点前截获并监控事件的传输&#xff0c;像个钩子钩上事件一样&#xff0c;并且能够在钩上事件时处理一些自己特定的事件。 Android操作系统有一套自己的事件分发机制&#xff0c;所有的代码调用和回调都是按照一定顺序执…

MyBatis涉及的动态SQL

动态 SQL 提供了更大的灵活性和可重用性&#xff0c;可以根据不同情况生成不同的 SQL 语句&#xff0c;从而满足应用程序的需求。它简化了数据库操作的编写和管理&#xff0c;提高了开发效率和代码的可维护性。 <if> 用于条件判断&#xff0c;根据条件决定是否包含某个SQ…

9-k8s-亲和力与反亲和力

文章目录 一、概念二、实操节点亲和力1三、实操pod亲和力2 一、概念 节点亲和力概念&#xff08;反亲和力相反&#xff09; ps&#xff1a;官方文档http://kubernetes.p2hp.com/docs/concepts/scheduling-eviction/assign-pod-node.html 节点亲和力&#xff08;Node Affinity&a…

自媒体人搞钱的5个AI工具

HI&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是第21篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完后可领取&#xff01;今天给大家分享一些基于个人创业需求场景&#xff0c;从产品设计图、网站搭建、logo设计、品牌设计&#xff0c;到图片…

CUDA学习笔记4——自定义设备函数

自定义设备函数 核函数&#xff1a;__global__修饰&#xff1b;在设备中执行&#xff1b;设备函数&#xff1a;__device__修饰&#xff1b;在设备中执行&#xff1b;只能被核函数或其他设备函数调用&#xff1b;主机函数&#xff1a;__host__修饰&#xff08;可省略&#xff0…