动态规划-两个数组的dp问题1

news2024/11/22 22:01:48

文章目录

  • 1. 最长公共子序列(1143)
  • 2. 不相交的线(1035)


1. 最长公共子序列(1143)

题目描述:
在这里插入图片描述

状态表示:
建立一个二维的数组dp,dp[i][j]表示在第一个字符串的0到i区间以及第二个字符串的0到j区间中的公共子序列的最长长度。
状态转移方程:
分为两种情况,第一种情况就是当第一个字符串的i位置和第二个字符串的j位置元素相同时,那么dp[i][j]=dp[i-1][j-1]+1。第二种情况当当第一个字符串的i位置和第二个字符串的j位置元素不相同时,那么dp[i][j]=max(dp[i-1][j],dp[i][j-1])。
初始化:
初始化因为要避免越界问题所以二维数组dp建立时的尺寸为m+1*n+1。对于dp数组中的值要处理两个维度都是从1下标开始的。
填表顺序:
从上到下,从左至右。
返回值:
返回值就是dp[m][n]。
代码如下:

class Solution {
    public int longestCommonSubsequence(String text1, String text2) {
        int m = text1.length();
        int n = text2.length();

        int[][] dp = new int[m + 1][n + 1];

        String s1 = " " + text1;
        String s2 = " " + text2;
        for (int i = 1; i <= m; i++) {

            for (int j = 1; j <= n; j++) {

                if (s1.charAt(i) == s2.charAt(j)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }

        return dp[m][n];

    }
}

题目链接
时间复杂度:O(N^2)
空间复杂度:O(N^2)

2. 不相交的线(1035)

题目描述:
在这里插入图片描述

状态表示:
跟上题类似,不过这一题是两个数组,dp[i][j]表示第一个数组0到i区间内与第二个数组0到j的区间内的公共数字串,可以这样理解。
状态转移方程:
状态转移方程和上一题也是类似,当i和j位置元素相等的时候,dp[i][j]=dp[i-1][j-1]+1,当不相等时,那么dp[i][j]=max(dp[i-1][j],dp[i][j-1])。
初始化:
初始化和上题一致。
填表顺序:
和上题一致。
返回值:
和上题一致都是dp[m][n]。
代码如下:

class Solution {
    public int maxUncrossedLines(int[] nums1, int[] nums2) {
        int m = nums1.length;
        int n = nums2.length;

        int[][] dp = new int[m + 1][n + 1];

        for (int i = 1; i <= m; i++) {

            for (int j = 1; j <= n; j++) {
                if (nums1[i-1] == nums2[j-1]) {

                    dp[i][j] = dp[i - 1][j - 1] + 1;
                } else {
                    dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
                }
            }
        }

        return dp[m][n];
    }
}

题目链接
时间复杂度:O(N^2)
空间复杂度:O(N^2)

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

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

相关文章

如何定时打开网站

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 1、打开工具按下Ctrl3&#xff0c;切换到定时器模块&#xff0c;左侧右键&#xff0c;选择新建 2、标题叫百度&#xff0c;等下就让它打开百度&#xff0c…

在Windows系统cmd中输入python无法启动想要的版本 | cmd输入python反而启动Microsoft Store

在Windows系统cmd中输入python无法启动想要的版本 | cmd输入python反而启动Microsoft Store 情况一&#xff1a;无法启动目标python版本&#xff0c;明明已经添加了环境变量 根源&#xff1a;环境变量Path中有多个版本的python路径&#xff0c;想启动的python对应的环境变量排…

STM32F407实现傅里叶变换的三种方法【附源码】

一、浅谈傅里叶变换&#xff08;Fourier Transformation&#xff0c;FT&#xff09; 1、傅里叶级数 想要了解傅里叶变换&#xff0c;就要先了解一下什么是傅里叶级数。 如图所示&#xff0c;通过不断合成不同频率的正弦波&#xff08;频率分量&#xff09;&#xff0c;合成后…

【电子通识】“二八定律”(巴莱多定律)在电子维修中也是这样吗?

二八定律的大意是说&#xff1a;少数20%的东西&#xff0c;占据了80%的另外一种东西。 比如世界大约20%的人占据了大约80%的财富&#xff1b;地球上20%的国家占据了80%的石油资源&#xff1b;太阳系中80%的质量集中在20%的天体上面&#xff1b;20%的疾病是80%病死者的直接死亡原…

什么是弹性云服务器(ECS)

弹性云服务器&#xff08;Elastic Cloud Server&#xff0c;ECS&#xff09;是由CPU、内存、操作系统、云硬盘组成的基础的计算组件。弹性云服务器创建成功后&#xff0c;您就可以像使用自己的本地PC或物理服务器一样&#xff0c;在云上使用弹性云服务器。 云服务器ECS&#x…

微软如何打造数字零售力航母系列科普07 - Azure PlayFab:你从未想过的世界上最大的开发工具(平台)

Azure PlayFab&#xff1a;你从未想过的世界上最大的开发工具 微软的James Gwertzman告诉GamesIndustry.biz Academy他帮助开发者成功的使命 制作游戏比以往任何时候都更容易上手。现在有无数的游戏引擎可供选择&#xff0c;其中大多数是免费的&#xff0c;PC空间的店面也同样重…

【CAN】知识点:错误帧、远程帧、过载帧

0、帧用途 数据帧:用于发送单元向接收单元传送数据的帧; 远程帧:用于接收单元向具有相同标识符的发送单元请求数据的帧; 错误帧:用于当检测出错误时向其它单元通知错误的帧; 过载帧:用于接收单元通知其尚未做好接收准备的帧 1、远程帧 1.1 帧结构 数据帧和远程帧有标…

C++深度解析教程笔记7

C深度解析教程笔记7 第13课 - 进阶面向对象&#xff08;上&#xff09;类和对象小结 第14课 - 进阶面向对象&#xff08;下&#xff09;类之间的基本关系继承组合 类的表示法实验-类的继承 第15课 - 类与封装的概念实验-定义访问级别cmd 实验小结 第16课 - 类的真正形态实验-st…

链表经典面试题上

目录 创作不易&#xff0c;如若对您有帮助&#xff0c;还望三连&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 题目一&#xff1a;203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 题目二&#xff1a;206. 反转链表 - 力扣&#xff08;LeetCode&#xff…

攻防世界XCTF-WEB入门12题解题报告

WEB入门题比较适合信息安全专业大一学生&#xff0c;难度低上手快&#xff0c;套路基本都一样 需要掌握&#xff1a; 基本的PHP、Python、JS语法基本的代理BurpSuite使用基本的HTTP请求交互过程基本的安全知识&#xff08;Owasp top10&#xff09; 先人一步&#xff0c;掌握W…

EasyExcel 处理 Excel

序言 本文介绍在日常的开发中&#xff0c;如何使用 EasyExcel 高效处理 Excel。 一、EasyExcel 是什么 EasyExcel 是阿里巴巴开源的一个 Java Excel 操作类库&#xff0c;它基于 Apache POI 封装了简单易用的 API&#xff0c;使得我们能够方便地读取、写入 Excel 文件。Easy…

力扣数据库题库学习(4.28日)--1581.进店却未进行过交易的顾客

1581. 进店却未进行过交易的顾客 问题链接 思路分析 有一些顾客可能光顾了购物中心但没有进行交易。请你编写一个解决方案&#xff0c;来查找这些顾客的 ID &#xff0c;以及他们只光顾不交易的次数。返回以 任何顺序 排序的结果表。 要求&#xff1a; 获取只浏览不消费的…

MySQL-笔记-08.数据库编程

目录 8.1 编程基础 8.1.1 基本语法 8.1.2 运算符与表达式 1. 标识符 2. 常量 &#xff08;1&#xff09; 字符串常量 &#xff08;2&#xff09;日期时间常量 &#xff08;3&#xff09;数值常量 &#xff08;4&#xff09;布尔值常量 &#xff08;5&#xff09;NULL…

深度学习:基于Keras,使用长短期记忆人工神经网络模型(LSTM)对股票市场进行预测分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

百度网盘上的资料怎么打印出来?

百度网盘是一种云端存储服务&#xff0c;许多人选择将工作和学习相关的资料存储在百度网盘中&#xff0c;以便在需要时方便使用。要将百度网盘上的资料打印出来&#xff0c;实际上有多种方法。例如&#xff0c;您可以将百度网盘中的资料下载到本地&#xff0c;然后前往打印店进…

结合创新!频域+时间序列,预测误差降低64.7%

频域时间序列不仅能提供更丰富的信息&#xff0c;还能提高模型性能和预测准确性。对于论文er来说&#xff0c;是个可发挥空间大、可挖掘创新点多的研究方向。 具体来说&#xff1a; 通过将复杂的时间序列数据转换成简单的频率成分&#xff0c;我们可以更容易地捕捉到数据的周期…

贪心算法 Greedy Algorithm

1) 贪心例子 称之为贪心算法或贪婪算法&#xff0c;核心思想是 将寻找最优解的问题分为若干个步骤 每一步骤都采用贪心原则&#xff0c;选取当前最优解 因为没有考虑所有可能&#xff0c;局部最优的堆叠不一定让最终解最优 v2已经不会更新v3因为v3更新过了 贪心算法是一种在…

MySQL 运维篇

回顾基本语句&#xff1a; 数据定义语言(DDL) 这类语言用于定义和修改数据库的结构&#xff0c;包括创建、删除和修改数据库、 表、视图和索引等对象。 主要的语句关键字包括 CREATE 、 DROP 、 ALTER 、 RENAME 、 TRUNCATE 等。 create database 数据库 &#xff1b; cr…

在vue3项目中设置错误路径的统一跳转

在我们前端开发过程中&#xff0c;如果&#xff0c;访问到了错误的或者不存在的路径&#xff0c;那么会直接出现空白。在一个完整的项目中&#xff0c;应该给用户一些友好的提示&#xff0c;显示他访问到了错误的页面。 我们可以专门的创建一个错误界面的.vue文件&#xff0c;…

.360勒索病毒的威胁:如何恢复您的数据?

引言&#xff1a; 近年来&#xff0c;网络安全威胁层出不穷&#xff0c;其中.360勒索病毒以其独特的攻击方式和广泛的传播能力&#xff0c;成为了众多企业和个人面临的重大挑战。本文将对.360勒索病毒进行深入剖析&#xff0c;并探讨应对此类病毒的有效策略&#xff0c;以帮助…