代码随想录算法训练营第五十三天 1143.最长公共子序列 、1035.不相交的线、53. 最大子序和

代码随想录算法训练营第五十三天 | 1143.最长公共子序列1035.不相交的线53. 最大子序和

1143.最长公共子序列

题目链接:1143. 最长公共子序列 - 力扣(LeetCode)

class Solution {public int longestCommonSubsequence(String text1, String text2) {int len1 = text1.length();int len2=  text2.length();// dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j], 与718不同// 相对于718.最长重复子数组,718要求子数组是连续的,所以一旦不相同就要重新计算dp(dp = 0);// 但是本题子序列可以是不连续的,所以就算当前不相同,也要往前看是否有相同的int[][] dp = new int[len1 + 1][len2 + 1];for (int i = 1 ; i <= text1.length() ; i++) {char char1 = text1.charAt(i - 1);for (int j = 1; j <= text2.length(); j++) {char char2 = text2.charAt(j - 1);if (char1 == char2) { // 开始列出状态转移方程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[len1][len2];}
}/**
解释一、
当char1不等于char2的时候,已经取了max(dp【i-1】【j】, dp【i】【j-1】),是实时更新到最大结果的,因为题目不要求是连续的,所以不管char1等不等于char2,每次dp【i】【j】的结果都是实时更新到最大的结果。
第718题,跟这个很类似,但是因为题目要求是连续的,所以在遇到num1不等于num2的时候,不能把之前的结果用来更新。如果采用这道题实时更新的话,比如【0,1,3】和【1, 0, 3】。
遇到3 = 3的时候,就等于 1 + 1 = 2了,因为【0,1,3】和【1,0】这里的最长递增子序列为1。这样做没有考虑是否连续,所以和本题不一样。解释二、
上一题以i-1和j-1是因为子数组必须要求是连续的,如果不连续,公共子数组直接归零,下一个子数组不能继承前一个子数组的公共子数组长度。子序列则不一样,允许中间有间隔,下一个子序列可以继承前一个子序列的公共子序列长度。
这样说很抽象,我们举个例子。比如说两个数组nums1 = 【1,2,3,4,5】 , nums2 = 【1,2,3,8,5】 。在index=3的时候出现分歧了,如果是公共子数组,到index=3时,其公共子数组必须要归零,如果不归零,会影响index=4的判断。
而如果是公共子序列,index=3可以保留index=2的最长子序列数,继而在index=4时继续递增,主要问题就在于,如果你想要这个又要的递推公式dp【i】【j】 = dp【i-1】【j-1】 + 1 就必须这样定义,你当然也可以用上一题的方式定义这一题,或者用这一题的方式定义上一题,但你就需要一个非常麻烦的递推公式 */

1035.不相交的线

题目链接:1035. 不相交的线 - 力扣(LeetCode)

理解成最长公共子序列,一模一样

class Solution {public int maxUncrossedLines(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2 = nums2.length;int[][] dp = new int[len1 + 1][len2 + 1];for(int i = 1; i <= len1; ++i) {for(int j = 1; j <= len2; ++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[len1][len2];}
}

53. 最大子序和

题目链接:53. 最大子数组和 - 力扣(LeetCode)

// 贪心:保证当前区间的count一定大于0,同时更新maxSum,否则舍去count(设置count = 0)
class Solution {public int maxSubArray(int[] nums) {int count = 0;int maxSum = Integer.MIN_VALUE;for(int num : nums) {count += num;maxSum = Math.max(count, maxSum);if(count < 0) {count = 0;}}return maxSum;}
}// DP
class Solution {public int maxSubArray(int[] nums) {int[] dp = new int[nums.length];int maxSum = nums[0];dp[0] = nums[0];for(int i = 1; i < nums.length; ++i) {// 类似于贪心一样,如果dp[i-1]小于0,则舍弃dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);maxSum = Math.max(maxSum, dp[i]);}return maxSum;}
}

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

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

相关文章

RK3568平台 USB数据包的收发格式

一.USB硬件拓扑结构 compound device &#xff1a;多个设备组合起来&#xff0c;通过HUB跟Host相连composite device &#xff1a;一个物理设备有多个逻辑设备(multiple interfaces) 在软件开发过程中&#xff0c;我们可以忽略Hub的存在&#xff0c;硬件拓扑图简化如下&#x…

【开源物联网平台】使用MQTT.fx模拟设备接入FastBee物联网平台

​&#x1f308; 个人主页&#xff1a;帐篷Li &#x1f525; 系列专栏&#xff1a;FastBee物联网开源项目 &#x1f4aa;&#x1f3fb; 专注于简单&#xff0c;易用&#xff0c;可拓展&#xff0c;低成本商业化的AIOT物联网解决方案 目录 一、接入步骤 1.1 创建产品&#xff…

9款世界级垂直领域软件架构师Visio平替作图工具!

1 LucidChart 一个基于HTML5的在线流程图绘制和协作应用平台&#xff0c;用户可以通过它方便快速的实现流程图表的绘制&#xff0c;同时还可以实现与他人进行实时的流程图绘制和修改功能&#xff0c;对需要群组协作功能的团队来说&#xff0c;这点非常方便。 由于LucidChart是…

deeplearning with pytorch (四)

1.Convolutional Neural Network Model torch.Tensor.view — PyTorch 2.2 documentation 在神经网络中&#xff0c;使用激活函数&#xff08;如ReLU&#xff09;是为了引入非线性&#xff0c;使得网络能够学习和模拟复杂的函数映射。ReLU&#xff08;Rectified Linear Unit&…

Python 类的介绍

类class的概念 类是面向对象编程中的一个重要概念&#xff0c;它是一种用于创建对象的模板或蓝图。类定义了对象的属性和行为&#xff0c;并提供了一种封装数据和功能的方式。 类可以看作是对象的抽象&#xff0c;它描述了对象的共同特征和行为。通过类&#xff0c;我们可以创…

如何成为IT产品经理:从入门到精通

如何成为IT产品经理&#xff1a;从入门到精通 在信息爆炸的时代&#xff0c;IT产品经理成为了科技行业的中坚力量。他们不仅要有深厚的技术背景&#xff0c;还需掌握市场动态&#xff0c;对用户需求有着敏锐的洞察力。本文将为您揭示成为IT产品经理的秘诀&#xff0c;带您从入…

布局小技巧

布局小技巧 行内元素、行内块元素&#xff0c;可以被父元素当做文本处理。 即&#xff1a;可以像处理文本对齐一样&#xff0c;去处理&#xff1a;行内、行内块在父元素中的对齐。 例如&#xff1a;text-align、line-height、text-indent等 如何让子元素&#xff0c;在父亲中 …

VM内存结构和垃圾回收机制

引言 在计算机科学中&#xff0c;虚拟机&#xff08;VM&#xff09;是一个重要的概念&#xff0c;它允许程序在硬件平台之上运行。虚拟机模拟真实机器的行为&#xff0c;为程序提供了一个独立的运行环境。本文将深入探讨VM的内存结构和垃圾回收机制&#xff0c;以帮助读者更好…

图形系统开发实战课程:进阶篇(上)——10.应用实例:交通路网

图形开发学院&#xff5c;GraphAnyWhere 课程名称&#xff1a;图形系统开发实战课程&#xff1a;进阶篇(上)课程章节&#xff1a;“图形样式”原文地址&#xff1a;https://www.graphanywhere.com/graph/advanced/2-10.html 第十章 应用实例&#xff1a;交通路网 \quad 在前面几…

基于springboot精品在线试题库系统论文

摘 要 使用旧方法对作业管理信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在作业管理信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的精品在线试题库系…

uniapp调用原生android插件传递回调函数

在混合开发中&#xff0c;uniapp调用android原生的方法&#xff0c;原生方法在处理过程中无法同步给js返回数据&#xff0c;异步执行&#xff0c;那么可以使用传递uniapp回调函数实现 一、编写android的方法 public class MyLibraryPlugin extends UniModule {private UniJS…

python爬虫(2)

继上节 查看数组维数 可以使用数组的ndim属性 代码示例如下&#xff1a; import numpy as np c np.random.randint(1,9,5) print(c.ndim) 结果如下&#xff1a; 当然这些也可以结合前面的各种用法来使用 1、选取数组元素 &#xff08;1&#xff09;一维数组的元素…

线程池不香了? 结构化并发才是王道!

我们先定义获取用户信息任务&#xff1a; 再定义获取订单信息任务&#xff1a; 然后再构造线程池并执行任务&#xff1a; 输出结果为&#xff1a; 看上去一切都刚刚好&#xff0c;但是&#xff0c;如果获取订单信息时出错了&#xff0c;此时会是什么现象呢&#xff1f;修改获取…

外包干了一周,技术明显倒退。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…

BUUCTF-Misc2

wireshark1 1.打开附件 发现是流量包&#xff0c;放到Wireshark中分析 2.过滤 根据题目的提示寻找管理员登录的网站&#xff0c;从中获取密码 用http.request.methodPOST&#xff0c;过滤当前的 HTTP 请求为 POST 方法 3.查找 双击过滤后的流量包&#xff0c;查找管理员密码…

TCP/IP模型中网络层和网络接口层的区别 通俗解释

问题 TCP/IP模型中的网络层和网络接口层有什么区别&#xff0c;或者说 ip地址和mac地址有什么区别&#xff0c;通过ip不就能找到要发送的设备了吗 为什么还需要mac地址用简单的语言来解释一下。 TCP/IP模型中的网络层和网络接口层主要的区别在于它们处理的信息和功能不同&…

Self-evolve——基于大语言模型的代码演进框架

导语 本研究提出了一个名为Self-evolve的框架&#xff0c;它旨在通过大型语言模型&#xff08;LLMs&#xff09;实现代码生成的进化。这一框架在Text-to-Code任务中引入了一种全新的处理流程&#xff0c;以提高LLMs在代码生成方面的效率和准确性。在之前&#xff0c;尽管LLMs在…

2024【问题解决】Github 2024无法克隆git clone自从签了2F2安全协议之后

项目场景:ping通Github但没法clone–502 问题描述 提示:ping通Github但没法clone--502: 例如:git clone https://gitclone.com/l.git/*** $ git clone https://github.com/darrenpig/Yocto Cloning into Yocto_tutorial... fatal: unable to access https://gitclone.co…

从仓储管理看3C电子行业智慧物流的优势

仓储管理是智慧物流的重要组成部分。通过引入自动化、智能化的仓储管理系统&#xff0c;3C电子企业可以实现库存的精准管理、快速分拣和高效配送。这不仅减少了库存成本&#xff0c;还大大提高了运营效率和市场响应速度。 传统的仓储管理依赖于人工操作和纸质文档记录&#xff…

vcomp140.dll丢失如何修复,5种修复方法轻松搞定vcomp140.dll问题

vcomp140.dll文件的丢失可能会引发一系列系统运行与软件功能上的问题。具体来说&#xff0c;这个动态链接库文件是Visual C Redistributable的一部分&#xff0c;对于许多基于此环境开发的应用程序至关重要。一旦缺失&#xff0c;可能会导致部分应用程序无法正常启动或运行&…