【代码训练营】day53 | 1143.最长公共子序列 1035.不相交的线 53. 最大子序和
所用代码 java
最长公告子序列 LeetCode 1143
题目链接:最长公告子序列 LeetCode 1143 - 中等
思路
这个相等于上一题的不连续状态
- dp[i] [j]:以[0, i-1]text1和以[0, j-1]text2 的最长公共子序列的长度为dp[i] [j]
- 递推公式:
- 相同:
if(text1.charAt(i-1) == text2.charAt(j-1)) dp[i][j] = dp[i-1][j-1] + 1;
- 不相同:
else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
- 相同:
- 初始化:第一行,第一列即i=0,j=0的情况,无实意因为0
- 遍历顺序:先i后j,先j都i都可以
- 打印dp
- 结果:需保留在一个result中,最后一个数不一定是最长的
class Solution {public int longestCommonSubsequence(String text1, String text2) {int[][] dp = new int[text1.length() + 1][text2.length() + 1];int result = 0;// 初始化 -- dp[i][0]和dp[0][j]无意义初始化为0for (int i = 1; i <= text1.length(); i++) {for (int j = 1; j <= text2.length(); j++) {// 以i-1和j-1结尾的两个字符相等,最大子序列就+1// 不相等话就保留前一个最大的长度if (text1.charAt(i-1) == text2.charAt(j-1)) {dp[i][j] = dp[i-1][j-1] + 1;} else{dp[i][j] = Math.max(dp[i-1][j], dp[i][j- ]);}result = Math.max(result, dp[i][j]);}
// System.out.println(Arrays.toString(dp[i]));}return result;}
}
总结
本题关键在于我们相等的时候是直接去那个数+1,不相等则保留。
因为我们的dp数组的定义就是如此,abc aac这两个串,b对应第二个a时,前面还有一个a相等,所有对应的状态为1,否则就会漏掉一些需要的状态。
本题还可以用一维数组的方法,但不建议:
关键在于需要一个额外的参数来记录上一列的值,即dp[i-1] [j-1],想通这一点就好办了
class Solution {public int longestCommonSubsequence(String text1, String text2) {int n1 = text1.length();int n2 = text2.length();// 放在第二个for里面,所有n2+1int[] dp = new int[n2+1];// 0无实意、初始化为0for (int i = 1; i <= n1; i++) {// pre 相当于dp[i-1][j-1]int pre = dp[0];for (int j = 1; j <= n2; j++) {// cur用于更新preint cur = dp[j];if (text1.charAt(i-1) == text2.charAt(j-1)){dp[j] = pre + 1;}else {dp[j] = Math.max(dp[j], dp[j-1]);}pre = cur;}
// System.out.println("pre = " + pre);System.out.println(Arrays.toString(dp));}return dp[n2];}
}
打印dp:
Your input:"abcde""ace"
Output:3
Expected:3
stdout:[0, 1, 1, 1] pre = 1[0, 1, 1, 1] pre = 1[0, 1, 2, 2] pre = 2[0, 1, 2, 2] pre = 2[0, 1, 2, 3] pre = 3
不相交的线 LeetCode 1035
题目链接:不相交的线 LeetCode 1035 - 中等
思路
无。
找相同的元素,且要保证顺序,相当于找相同子序列!
class Solution {public int maxUncrossedLines(int[] nums1, int[] nums2) {int n1 = nums1.length;int n2 = nums2.length;int[][] dp = new int[n1 + 1][n2 + 1];int result = 0;for (int i = 1; i <= n1; i++) {for (int j = 1; j <= n2; 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]);}result = Math.max(result, dp[i][j]);}}return result;}
}
总结
这题和上一题是一样的代码,我花了很长时间去想怎样才能保证不相交,结果思路就错了。
重点是要分析出题目的意思,两个数组相同元素连接起来应该是怎样连的我们根本不用关心,我们只用知道相连的元素相当于数组的子序列,这就保证了连线不相交!
最大子序和 LeetCode
题目链接:最大子序和 LeetCode - 中等
思路
本题可用贪心,累计最大和就是和为正数可继续添加,负数则舍去。
- dp[i]:以nums[i]为结尾的的最大联系子序列和为 dp[i]
- 递推公式:
dp[i] = max(dp[i-1] + nums[i],dp[i] )
- 延续前面的子序列和:dp[i-1] + nums[i]
- 前面不要了,从头计算:dp[i]
- 初始化:
dp[0] = nums[0]
按照dp数组意义 - 遍历顺序
- 打印
- 结果:并不一定在结尾的位置
class Solution {public int maxSubArray(int[] nums) {int[] dp = new int[nums.length];// 初始化 - 只有一个数序列和肯定为他自己dp[0] = nums[0];int maxSUm = dp[0]; // 最大的序列和可能不在末尾,需用一个数保存for (int i = 1; i < nums.length; i++) {dp[i] = Math.max(dp[i-1] + nums[i], nums[i]);maxSUm = Math.max(maxSUm, dp[i]);}
// System.out.println(Arrays.toString(dp));return maxSUm;}
}
总结
我们发现本题递推公式只与前一个值有关,所以可以把一维的数组压缩成零维,也就是一个数。
class Solution {public int maxSubArray(int[] nums) {int pre = nums[0]; // 前一次状态的值int maxSum = nums[0];for (int i = 1; i < nums.length; i++) {// 判断:我们只取前一次状态的还是需要加上本次状态的nums[i]pre = Math.max(pre + nums[i], nums[i]);maxSum = Math.max(maxSum, pre);}return maxSum;}
}
压缩空间使我们空间复杂度从O(n)变为了O(1),极大的提高了运算速度。
相关文章:
【代码训练营】day53 | 1143.最长公共子序列 1035.不相交的线 53. 最大子序和
所用代码 java 最长公告子序列 LeetCode 1143 题目链接:最长公告子序列 LeetCode 1143 - 中等 思路 这个相等于上一题的不连续状态 dp[i] [j]:以[0, i-1]text1和以[0, j-1]text2 的最长公共子序列的长度为dp[i] [j]递推公式: 相同&#x…...

消息队列理解
为什么使用消息队列 使⽤消息队列主要是为了: 减少响应所需时间和削峰。降低系统耦合性(解耦/提升系统可扩展性)。 当我们不使⽤消息队列的时候,所有的⽤户的请求会直接落到服务器,然后通过数据库或者 缓存响应。假…...

【Linux内核一】在Linux系统下网口数据收发包的具体流向是什么?
在TCP/IP网络分层模型里,整个协议栈被分成了物理层、链路层、网络层,传输层和应用层。物理层对应的是网卡和网线,应用层对应的是我们常见的Nginx,FTP等等各种应用。Linux实现的是链路层、网络层和传输层这三层。 在Linux内核实现中…...

南京、西安集成电路企业和高校分布一览(附产业链主要厂商及高校名录)
前言 3月2日,国务院副总理刘鹤在北京调研集成电路企业发展,并主持召开座谈会。刘鹤指出,集成电路是现代化产业体系的核心枢纽,关系国家安全和中国式现代化进程。他表示,我国已形成较完整的集成电路产业链,也…...

后端Java随机比大小游戏实战讲解
## - 利用print打印输出提示用户 ## - 利用Scanner函数抓取数据 ## - 利用Math方法实现随机数 #### 1.首先用到的是print函数,对用户进行提醒进一步的操作 通过System.out.print();提示用户进行选择买大买小。 #### 2.然后利用Scanner函数,对用户输出…...

dolphinschedule使用shell任务结束状态研究
背景:配置的dolphin任务,使用的是shell,shell里包含了spark-submit 如下截图。 dolphin shell 介绍完毕,开始说明现象。 有天有人调整了集群的cdp配置,executor-cores max1 我之前这里写的是2,所以spark任…...

如何用postman实现接口自动化测试
postman使用 开发中经常用postman来测试接口,一个简单的注册接口用postman测试: 接口正常工作只是最基本的要求,经常要评估接口性能,进行压力测试。 postman进行简单压力测试 下面是压测数据源,支持json和csv两个格…...
AHRS(航姿参考系统)IMU(惯性测量单元)和INS的分析对比研究-2023-3-8
名称 AHRS俗称航姿参考系统 IMU 惯性测量单元 INS 惯性导航系统 英文 全称 (Attitude and Heading Reference System) (Inertial Measurement Unit) Inertial Navigation System) 组成 加速度计,磁…...

企业管理经典书籍推荐
几乎每一位成功的商业人士都有着良好的阅读习惯。并且他们阅读涉猎的范围也大多与企业管理和领导力有关。而关于企业管理经典书籍,我推荐你看以下这两本。一本是《经理人参阅:企业管理实务》,另一本是《经理人参阅:领导力提升》。…...
JVM系列——破坏双亲委派模型的场景和应用
上文提到过双亲委派模型并不是强制性的,而是Java设计者推荐的类加载器实现方式。 在Java的世界中大部分的类加载器都遵循这个模型,但也有例外的情况,直到Java 模块化出现为止,双亲委派模型出现过几次(3次?&…...

基于智能边缘和云计算的数字经济服务细粒度任务调度机制
数字经济被各国视为推动经济增长的必然选择,为经济高质量发展提供了新机遇、新路径。对于中国市场而言,云计算背后的强大基础是数字经济不可阻挡的发展趋势。在数字经济中,云作为基础设施成为构建数字经济金字塔的基础。为缓解数字经济服务器…...

ccc-pytorch-卷积神经网络实战(6)
文章目录一、CIFAR10 与 lenet5二、CIFAR10 与 ResNet一、CIFAR10 与 lenet5 第一步:准备数据集 lenet5.py import torch from torch.utils.data import DataLoader from torchvision import datasets from torchvision import transformsdef main():batchsz 128C…...

置信椭圆(误差椭圆)详解
文章目录Part.I 预备知识Chap.I 一些概念Chap.II 主成分分析Chap.III Matlab 函数 randnChap.IV Matlab 函数 pcaPart.II 置信椭圆的含义Chap.I 一个 Matlab 实例Sec.I 两个不相关变量的特征Sec.II 两个相关变量的特征Chap.II 变换阵 (解相关矩阵) 的求解ReferencePart.I 预备知…...

FreeSWITCH 智能呼叫流程设计
文章目录1. 智能呼叫流程2. 细节处理1. 呼叫字符串指定拨号计划2. 外呼的拨号计划3. 语音打断的支持1. 智能呼叫流程 用户与机器人对话通常都是以文本的形式进行,但是借助 ASR 和 TTS 技术,以语音电话为载体的智能呼叫系统成为可能。智能呼叫系统涉及到…...
什么是Restful风格
什么是RestFul风格? Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 REST即Representational State Transfer的缩写࿰…...

sumifs的交叉 表的例子
比如这样,那么冰箱绿山店的栏位中,SUMIFS($D$3:$D$10,$B$3:$B$10,$F3,$C$3:$C$10,G$2)就是把求和范围,条件1设置为固定列的复合引用,条件2设置为固定行的复合引用即可。...

React :一、简单概念
目录 1.什么是React? 2.谁开发的 3.为什么要学React? 4.React的特点? 5.React依赖包 6.第一个React程序 7.虚拟DOM的两种创建方法 8.虚拟DOM和真实DOM 1.什么是React? 用于构建用户界面的JavaScript库,是一个将…...

Actipro WinForms Studio Crack
Actipro WinForms Studio Crack 已验证Microsoft.NET 7兼容性。 添加了MetroDark配色方案。 添加了支持MetroLight和MetroDark颜色方案的MetroScrollBarRenderer。 添加了IWindowsColorScheme接口,该接口将替换对WindowsColorScheme的大多数引用。 添加了IWindowsCo…...

英伦四地到底是什么关系?
英格兰、苏格兰、威尔士和北爱尔兰四地到底是什么关系,为何苏格兰非要独立?故事还要从中世纪说起。大不列颠岛位于欧洲西部,和欧洲大陆隔海相望。在古代,大不列颠岛和爱尔兰属于凯尔特人的领地。凯尔特人是欧洲西部一个庞大的族群…...

Google三大论文之GFS
Google三大论文之GFS Google GFS(Google File System) 文件系统,一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS 虽然运行在廉价的普遍硬件设备上,但是它依然了提供灾难冗余的能力,为大量客户机提供了…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...