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

news2024/11/15 15:30:19

文章目录

  • 1. 两个字符串的最小ASCII删除和(712)
  • 2. 最长重复子数组(718)


1. 两个字符串的最小ASCII删除和(712)

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

状态表示:
根据经验以及题目要求,建立二维数组dp,使用dp[i][j]表示s1字符串0到i区间内以及s2字符串0到j区间内的拥有最大ASCII码值的公共子序列。这里使用到了反向思考的思想,仔细看一下题目要求使得两个字符串相等所需删除字符的最小ASCII码值,反过来想就是要求保留下来的公共子序列的ASCII码值最大。
状态转移方程:
这里的状态还是根据s1字符串在0到i区间内以及s2字符串在0到j区间内的最后一个字符进行分析。当s1[i]以及s2[j]都在公共的子序列中,如果满足s1[i]==s2[j],那么dp[i][j]=dp[i-1][j-1]+s1[i]。当s1[i]在公共的子序列中,s2[j]不在公共子序列中,那么可以得到dp[i][j]=dp[i][j-1],其实这里的状态转移方程并不准确,因为dp[i][j-1]也包含s1[i]不在公共的子序列中,s2[j]也不在公共子序列中这种情况,但是没关系因为dp数组的每个值求的是最大值,不怕重复。当s1[i]不在公共的子序列中,s2[j]在公共子序列中,那么可以得到dp[i][j]=dp[i-1][j],这里和上一种情况是类似的,也包含了s1[i]不在公共的子序列中,s2[j]也不在公共子序列中这种情况。最后一种情况就是1[i]不在公共的子序列中,s2[j]也不在公共子序列中,dp[i][j]=dp[i-1][j-1]。
初始化:
为了防止数组越界以及方便运算,给二维数组dp加上第0行以及第0列。这里的第0行和第0列分别代表s1和s2为空串,很好理解,既然为空串就别谈公共子序列的最大ASCII码值了,肯定都是0,因此全部赋为0即可。
填表顺序:
从上至下,从左至右。
返回值:
这里的返回值比较特殊,需要先将s1和s2两个字符串的ASCII码值相加起来之后再减去2*dp[m][n]。
代码如下:

class Solution {
    public int minimumDeleteSum(String s1, String s2) {
        int m = s1.length();
        int n = s2.length();

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

        int max = 0;
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (s1.charAt(i - 1) == s2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + (int) s1.charAt(i - 1);
                }
                dp[i][j] = Math.max(dp[i][j], Math.max(dp[i][j - 1], dp[i - 1][j]));
                max = Math.max(max, dp[i][j]);
            }
        }

        int ret = 0;
        for (int x :
                s1.toCharArray()) {
            ret += x;
        }


        for (int x :
                s2.toCharArray()) {
            ret += x;
        }

        return ret - 2 * max;

    }
}

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

2. 最长重复子数组(718)

题目描述:
在这里插入图片描述
状态表示:
根据题目要求以及经验,建立二维数组dp,使用dp[i][j]表示两个数组分别在0到i区间以及0到j区间的以i及j位置元素为结尾的最长的公共子数组的长度。
状态转移方程:
子数组问题状态转移方程很简单,分析区间内的最后一个元素,如果0到i区间内最后一个元素和0到j区间内最后一个元素相等,那么dp[i][j]=dp[i-1][j-1]+1,如果不相等,dp[i][j]=0。
初始化:
初始化也还是一样,为了避免越界,给dp加上第0行和第0列,第0行和第0列全部赋为0。因为第0行和第0列是分别代表nums1为空数组以及nums2为空数组,那么这样肯定得不到公共子数组,更别提长度了。
填表顺序:
从上到下,从左至右。
返回值:
dp数组中最大值。
代码如下:

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

        int[][] dp = new int[m + 1][n + 1];
        int max = 0;
        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] = 0;
                }
                max = Math.max(max, dp[i][j]);
            }

        }
        return max;
    }
}

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

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

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

相关文章

深度解析YOLOV9,目标检测算法(附论文和源码)|

目录 一、YOLOV9 1、概述&#xff1a; 2&#xff0c;论文摘要&#xff1a; 输入数据在前馈过程中可能会有不可忽略的信息丢失。这种信息丢失会导致梯度流出现偏差&#xff0c;而梯度流又被用于更新模型。上述问题会导致深度网络在目标和输入之间建立不正确的关联&#xff0c…

【千帆AppBuidler】零代码构建AI人工智能应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

欢迎来到《小5讲堂》 这是《千帆平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景创建应用平台地址随机生成快速创建应用头像应用名称应用描述…

Python自动化神器:如何用PyAutoGUI模拟滚轮动一次

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、PyAutoGUI简介 PyAutoGUI是一个纯Python的GUI自动化工具&#xff0c;其目的是可以用程序控制鼠标和键盘操作。它主要在三个方面发挥作用&#xff1a;1&#xff09;对屏幕上的图像进行识别&#xff1b;2&#xf…

8.11 矢量图层线要素单一符号使用二

文章目录 前言箭头&#xff08;Arrow&#xff09;QGis设置线符号为箭头(Arrow)二次开发代码实现 总结 前言 本章介绍矢量图层线要素单一符号中箭头&#xff08;Arrow&#xff09;的使用说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 箭头&#xff08;Arr…

【制作100个unity游戏之26】unity2d横版卷轴动作类游戏5(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言三段攻击攻击设置只对敌人造成伤害限制可以移动攻击问题 角色连续按四下攻击&#xff0c;最后会多a一下问题&#xff1a;站在原地连续攻击野猪&#xff0c;只有第一下攻击野猪才掉血&#xff0c;后面的攻击野猪不掉血源码完结 …

数据结构复习指导之图的存储及基本操作

文章目录 图的存储及基本操作 考纲内容 复习提示 1.邻接矩阵法 2.邻接表法 3.十字链表 4.邻接多重表 5.图的基本操作 图的存储及基本操作 图的存储必须要完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法&#xff0c;采用不同的存储方式将对程序的效率产生…

八字排盘软件有哪些?

八字排盘软件是根据中国传统命理学中的生辰八字&#xff08;即一个人出生的年、月、日、时&#xff09;来分析个人命运和运势的工具。以下是一些可用的八字排盘软件&#xff1a; 无敌八字排盘算命软件 - 精准的八字排盘&#xff0c;全完免费&#xff0c;有手机版电脑版&#xf…

CentOS 安装 SeaweedFS

1. SeaweedFS 介绍 SeaweedFS 是一个简单且高度可扩展的分布式文件系统。有两个目标&#xff1a; to store billions of files! (存储数十亿个文件&#xff01;)to serve the files fast! (快速提供文件&#xff01;) Seaweedfs的中心节点&#xff08;center master&#xff09…

Stable Diffusion基础界面介绍

SD是stable diffusion的简称&#xff0c;AI绘画的一个开源应用,&#xff08;不需要科学上网&#xff09;&#xff0c;目前使用的版本是B站UP秋葉aaaki整理的最终版。 安装教程详见 B站up主 秋葉aaaki&#xff0c;教程下有提供stable diffusion的下载链接。 安装必要的三个基础…

接口文档编写注意事项

接口文档编写注意事项 字段方面 ①不需要的字段、逻辑中固定值的字段&#xff08;可写死的字段&#xff09;不提供 ②逻辑上可以合并的字段合并 例如&#xff1a;当一个互斥条件下&#xff0c;分别返回了两个字段&#xff0c;这个时候就可以在这个基础上将两个字段合并成一个…

UEC++学习(十五)创建、查找、加入会话

创建会话 基于上篇配置steam在线子系统之后&#xff0c;在Character.h中声明一个会话创建完成时的委托以及回调函数。 #include "Interfaces/OnlineSessionInterface.h"public://指向在线会话界面的指针,将会话接口存储在里面TSharedPtr<class IOnlineSession, ES…

Spring AOP(概念,使用)

目录 Spring AOPAOP是什么什么是Spring AOPAOP实际开发流程1. 引入依赖2. 编写AOP程序 Spring AOP详解Spring AOP中的核心概念Spring AOP的通知类型六种类型PointCutOrder(切面优先级) Spring AOP AOP是什么 Aspect Oriented Programminig(面向切面编程)切面指的是某一类特定…

Keli5烧写程序成功后再次烧写程序却不能识别芯片。解决方法

1问题&#xff08;已排除硬件问题和Debug配置问题&#xff09; 再次烧写不能识别下如图&#xff08;提示为不能识别到芯片&#xff09; 硬件识别正常 Debug配置正常 就是不能识别到芯片 2为什么会出现这个问题 在STM32Cude设置中没有设置SYS&#xff08;默认是No Debug&…

如何判断点在多边形内部:OpenCV--cv2.pointPolygonTest()方法详解

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

HTML常用标签-超链接标签

超链接标签 点击后带有链接跳转的标签 ,也叫作a标签 href属性用于定义连接 href中可以使用绝对路径,以/开头,始终以一个固定路径作为基准路径作为出发点href中也可以使用相对路径,不以/开头,以当前文件所在路径为出发点href中也可以定义完整的URL target用于定义打开的方式 _b…

照片误删如何恢复?这些方法帮你重拾回忆!

手机照片是我们记录美好时刻的重要工具。但有时我们会因为不小心或者错误操作而导致珍贵照片的丢失。那些与家人、朋友共度的美好时刻、旅途中的风景、重要的纪念日&#xff0c;一旦删除&#xff0c;就如同从记忆中抹去&#xff0c;令人惋惜不已。幸运的是&#xff0c;随着科技…

【AI智能体】零代码构建AI应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 文心智能体大赛背景创建应用平台地址快速构建【基础配置】…

利用关系感知一致性和虚拟特征补偿解决医学分类中的长尾问题

文章目录 Combat Long-Tails in Medical Classification with Relation-Aware Consistency and Virtual Features Compensation摘要方法实验结果 Combat Long-Tails in Medical Classification with Relation-Aware Consistency and Virtual Features Compensation 摘要 由于…

Blender使用python代码绘画:一个简单例子

Blender简介 Blender 是一款开源的三维计算机图形软件&#xff0c;它提供了广泛的功能&#xff0c;包括建模、动画、渲染、视频编辑等。Blender还支持Python编程接口&#xff0c;允许用户通过编写脚本来控制和定制软件的各个方面。 Blender的功能非常强大&#xff0c;它被广泛…

MySQL和吉客云单据接口对接

MySQL和吉客云单据接口对接 源系统:吉客云 杭州吉客云网络技术有限公司是经国家认定的高新技术企业&#xff0c;是国内领先的SaaSERP软件服务商&#xff0c;致力于为企业提供安全稳定、高可用性和高扩展性的一站式数字化解决方案。 写入目标:MySQL MySQL是最流行的数据库之一&a…