代码随想录算法训练营Day53 | 1143.最长公共子序列、1035.不相交的线、53.最大子数组和

1143.最长公共子序列

这题和 718.最长重复子数组 的主要差别在于子序列不要求连续了

这样的话哪怕 nums1[i - 1] 和 nums2[j - 1] 不相等也需要继承之前的最长公共子序列,具体继承什么?继承的是DP数组矩阵中左上方区域(包含本行和本列的)的最大值

和 718 相比主要差别在于递推公式:


1、DP数组定义:两个维度表示两个数组的索引,dp[i][j]表示以nums1[i - 1]nums2[j - 1]为结尾的两个字符串的最长公共子序列长度

2、DP数组初始化:首行与首列元素无意义,但为了递推公式将其初始化为0,其余元素随意

3、递推公式

        · 如果nums1[i - 1] == nums2[j - 1],那么dp[i][j] = dp[i - 1][j - 1] + 1(同718)

        · 如果nums1[i - 1] != nums2[j - 1],dp[i][j] 取dp[i][j - 1] 和 dp[i - 1][j] 中的较大值

        (左上方矩阵到达dp[i][j]的唯二途径就是dp[i][j - 1] 和 dp[i - 1][j] ,所以通过不断递推,这两个值可以获取左上方矩阵的最大值)

4、遍历顺序:从上到下从左到右遍历,先遍历nums1或nums2都可以

int longestCommonSubsequence(string text1, string text2) {// DP数组定义:以nums1[i - 1]和nums2[j - 1]为结尾的两个字符串的最长公共子数组长度// 首行与首列初始化为0vector<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矩阵,取矩阵(包含本行和本列的)左上方区域的最大值dp[i][j] = std::max(dp[i][j - 1], dp[i - 1][j]);}}}return dp[text1.size()][text2.size()];
}

1035.不相交的线

这题分析一下内在的要求:

1、数值得相等才能连线

2、为了不交叉,线的起点和终点的次序必须一样

分析一下其实就是最长公共子序列问题,所以代码可以直接照搬:

int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int ans = 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;elsedp[i][j] = std::max(dp[i][j - 1], dp[i - 1][j]);}}return dp[nums1.size()][nums2.size()];
}

53.最大子数组和

这题对比一下贪心解法就能发现dp的无脑之处了

贪心解法需要分析什么情况下可以累加,什么时候需要删去

动规解法只要分析好状态以及状态的转移,之后的具体判断全部交给递推过程就可以了

1、DP数组定义:dp[i]以nums[i]为最后一个元素的最大子数组和

2、DP数组初始化:dp[0] = nums[0],第一个元素的值作为初始状态

3、递推公式:dp[i] 的取值只有两种情况:

        1、之前的值加上nums[i]: dp[i] =  nums[i] + dp[i - 1]

        2、之前的值删去,从nums[i]重新开始:dp[i] = nums[i]

        dp[i] 取以上两种情况的较大值即可,不用考虑什么情况下选1什么情况下选2:

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

4、遍历顺序:从左到右遍历

int maxSubArray(vector<int>& nums) {vector<int> dp(nums.size(), 0);dp[0] = nums[0];int ans = nums[0];for (int i = 1; i < nums.size(); ++i) {// dp[i]只能取 nums[i] 或 nums[i] + dp[i - 1]dp[i] = std::max(nums[i], nums[i] + dp[i - 1]);ans = std::max(ans, dp[i]);}return ans;
}

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

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

相关文章

ctfshow-php特性

大佬文章 intval 的绕过 正则匹配 sha1 和 md5 的绕过 php 运算符优先级 php://fliter 的各种过滤器 正则匹配的回溯 php 正则匹配最大回溯 linux 的 curl命令用法 无回显 rce 的总结 命令执行总结 本文中引用的所有文章都在上面了&#xff0c;感谢各位大佬&#xf…

【java 基础】闲话 ClassLoader 和 资源读取

文章目录 ClassLoader再探tomcat的类加载器spring 的类加载器springboot 的类加载器 正确获取ClassLoader获取当前线程的ContextClassLoader加载当前类的ClassLoader不常用的获取 ClassLoader的方法 使用ClassLoader的读取资源ClassLoader 有几个常用的资源加载方法Class 的资源…

【操作系统概念】 第7章:死锁

文章目录 0.前言7.1 系统模型7.2 死锁特征7.2.1 必要条件7.2.2 资源分配图 7.3 死锁处理方法7.4 死锁预防&#xff08;deadlock prevention&#xff09;7.4.1 互斥7.4.2 占有并等待7.4.3 非抢占7.4.4 循环等待 7.5 死锁避免&#xff08;deadlock-avoidance&#xff09;7.5.1 安…

b站小土堆pytorch学习记录—— P25-P26 网络模型的使用和修改、保存和读取

文章目录 一、修改1.方法2.代码 二、保存和读取1.方法2.代码&#xff08;1&#xff09;保存&#xff08;2&#xff09;加载 3.陷阱 一、修改 1.方法 add_module(name: str, module: Module) -> None name 是要添加的子模块的名称。 module 是要添加的子模块。 调用 add_m…

练习 6 Web [极客大挑战 2019]HardSQL

[极客大挑战 2019]HardSQL 先尝试登录&#xff0c;查看报错信息 admin 111 password 1111 登录失败admin 111 password 1’or’1 登录成功 这里直接试了万能密码成功&#xff0c;复习一下&#xff0c;第一个 ’ 是为了闭合前面的sql语句&#xff0c;最后的1后面没有 ’ 是因为…

如何学习I2C协议

文章目录 学习I2C协议0 懒人直达1 了解协议开发者2 从恩智浦半导体公司下载官方技术文档3 翻译成中文4 资源下载 学习I2C协议 0 懒人直达 点击直达 1 了解协议开发者 I2C&#xff08;Inter-Integrated Circuit&#xff09;协议是由荷兰皇家飞利浦电子公司&#xff08;现恩智…

008-跨域

跨域 什么是跨域&#xff1f;非同源限制跨域解决方案CORSJSONP服务器进行第三方代理webscoketwindow.postMessage 什么是跨域&#xff1f; 同源策略&#xff1a;协议相同、域名相同、端口号相同 的两个页面被认为是同源。 由一个页面的 js 访问不同源的页面内容&#xff0c;被…

Window11 Ubuntu双系统安装

一、制作启动盘 ubuntu下载&#xff1a;https://cn.ubuntu.com/download 启动盘工具&#xff1a;https://cdimage.deepin.com/applications/deepin-boot-maker/windows/deepin-boot-maker.exehttps://cdimage.deepin.com/applications/deepin-boot-maker/windows/deepin-boot…

HTTP代理ip如何助旅游大数据领域?怎么去建立安全代理隧道连接?

HTTP代理IP在旅游大数据领域的应用主要体现在以下几个方面&#xff1a; 数据抓取&#xff1a;旅游大数据的获取往往需要从各种在线旅游平台、社交媒体、评论网站等抓取数据。使用HTTP代理IP可以在抓取过程中隐藏真实IP&#xff0c;避免被目标网站封锁&#xff0c;从而持续、稳定…

LeetCode 刷题 [C++] 第300题.最长递增子序列

题目描述 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 题目…

代码随想录算法训练营第25天|● 216.组合总和|||● 17.电话号码的字母组合

216.组合总和||| 思路:这题和77题的组合思路差不多一样,只是多了一步判断加起来的和是否和目标值相等,并且回溯需要把相应的值减去。 代码: vector<vector<int>> result;vector<int> path;void backtracking(int k,int targetSum,int sum,int startIndex)…

CTP-API开发系列之五:SimNow环境介绍

CTP-API开发系列之五&#xff1a;SimNow环境介绍 CTP-API开发系列之五&#xff1a;SimNow环境介绍SimNow模拟测试环境第一套第二套登录关键字段可视化终端常见问题 CTP-API开发系列之五&#xff1a;SimNow环境介绍 如果你要研发一套国内期货程序化交易系统&#xff0c;从模拟测…

设计模式在芯片验证中的应用——备忘录

1. 前言 软件设计模式定义了一组类和它们之间的关系&#xff0c;它们相互作用用以解决软件开发过程中面临的常见问题。由于验证工程师所做工作的重要部分包括使用面向对象语言(如SystemVerilog)进行编码&#xff0c;因此许多遇到的挑战都适合应用特定的设计模式来解决。将它们…

SCCM部署时遇到的问题:无法连接到SQL Server

根据提示信息逐一排除以下问题&#xff1a; 1、确保SQL服务器名称是否正确。 2、确保TCP1433和4022端口有没有被防火墙屏蔽。 3、站点服务器帐号加入SQLServer的sysadmin角色成员里 、确保SQL实例没有使用动态端口&#xff0c;可参考&#xff1a; Configure SQL Server to…

贪心 Leetcode 763 划分字母区间

划分字母区间 Leetcode 763 学习记录自代码随想录 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返…

题目 1572: 蓝桥杯-进制转换

题目描述: 程序提示用户输入三个字符&#xff0c;每个字符取值范围是0-9&#xff0c;A-F。然后程序会把这三个字符转化为相应的十六进制整数&#xff0c;并分别以十六进制&#xff0c;十进制&#xff0c;八进制输出。 代码: package lanqiao;import java.util.*;public clas…

重新启动vue-shop-maseter主支任务

以下是命令行&#xff0c;cmd任务管理程序进程中… 这部分是部分源码&#xff0c;用H5编辑器写的 等待慢慢启动重启中。。。。 然而没有反应&#xff0c;不知道为什么&#xff1f; 花里胡哨的&#xff0c;更加没看懂了。 我这暴脾气&#xff0c;气得我直接一顿乱敲 要怎…

C语言基础练习——Day01

目录 选择题 编程题 打印从1到最大的n位数 计算日期到天数转换 选择题 1、执行下面程序&#xff0c;正确的输出是 int x5,y7; void swap(int x, int y) {int z;zx;xy;yz; } int main() { int x3,y8; swap(int x, int y);printf("%d,%d\n"&#xff0c;x, y);return …

vue3怎么设置路由 Vue Route

1. 安装Vue Router npm install vue-router 2. 创建Home.vue组件 在 src/views 目录下创建一个名为 Home.vue 的文件&#xff1a; <!-- <template> 标签是Vue组件的模板部分&#xff0c;其中包含了组件的HTML结构。 --> <template><div><h1>…

2024年最新阿里云服务器地域选择方法,以及可用区说明

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…