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

LeetCode 1143 最长公共子序列

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

【解题思路】

  • 1.确定dp数组含义

    • dp[i][j] :长度为[0,i-1]的字符串和长度为[0,j-1]的字符串的最长公共子序列为dp[i][j]

  • 2.确定递推公式

    • text1[i-1]和text2[i-1]相同

      • 那么就找到了一个公共元素

        • dp[i][j] = dp[i-1][j-1]+1

    • text1和text2不相同

      • text1[0,i-2]与text2[0,j-1]的最长公共子序列

      • text1[0,i-1]与text2[0,j-2]的最长公共子序列

  • 3.初始化dp数组

    • 因为空串的最长公共子序列是0,因此dp[i][0]自然是0

    • 因为空串的最长公共子序列是0,因此dp[0][j]自然是0

  • 4.确定遍历顺序

    • 因为都是从当前元素的“前方”推导出来的,所以只能从前向后,从上到下遍历

  • 5.举例推导dp数组

【解题步骤】

  • 1.创建一个dp数组,长度等于text1的长度+1和text2的长度+1

  • 2.将字符串转为char类型数组

  • 3.遍历text1

    • 遍历text2

      • 递推公式

  • 4.返回dp[text1.length()][text2.length()];

【代码部分】

class Solution {public int longestCommonSubsequence(String text1, String text2) {char[] tx1 = text1.toCharArray();char[] tx2 = text2.toCharArray();int[][] dp = new int[tx1.length + 1][tx2.length + 1];for (int i = 1; i <= text1.length() ; i++) {for (int j = 1; j <= text2.length(); j++) {if(tx1[i-1] == tx2[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[text1.length()][text2.length()];}
}

LeetCode 1035 不相交的线

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

【解题思路】

  • 题意就是相等的元素连线,并且直线不能相交

    • 直线不能相交,这就是说明在字符串A中 找到一个与字符串B相同的子序列,且这个子序列不能改变相对顺序,只要相对顺序不改变,链接相同数字的直线就不会相交

      • 其实就是求最长公共子序列

  • 1.确定dp数组含义

    • dp[i][j] :长度为[0,i-1]的字符串和长度为[0,j-1]的字符串的最长公共子序列为dp[i][j]

  • 2.确定递推公式

    • nums1[i-1]和nums2[i-1]相同

      • 那么就找到了一个公共元素

        • dp[i][j] = dp[i-1][j-1]+1

    • nums1和nums2不相同

      • nums1[0,i-2]与nums2[0,j-1]的最长公共子序列

      • nums1[0,i-1]与nums2[0,j-2]的最长公共子序列

  • 3.初始化dp数组

    • 因为空串的最长公共子序列是0,因此dp[i][0]自然是0

    • 因为空串的最长公共子序列是0,因此dp[0][j]自然是0

  • 4.确定遍历顺序

    • 因为都是从当前元素的“前方”推导出来的,所以只能从前向后,从上到下遍历

  • 5.举例推导dp数组

【解题步骤】

  • 1.创建一个dp数组,长度等于nums1的长度+1和nums2的长度+1

  • 2.遍历nums1

    • 遍历nums2

      • 递推公式

  • 4.返回dp[nums1.length][nums2.length]

【代码部分】

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];}
}

LeetCode 53 最大子序和

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

【解题思路】

  • 1.确定dp数组含义

    • dp[i]:包括下标i(以nums[i]为结尾)的最大连续子序列和为dp[i]

  • 2.确定递推公式

    • dp[i-1]+nums[i]

      • 就是nums[i]加入当前连续子序列和

    • nums[i]

      • 就是从头开始计算当前连续子序列和

  • 3.初始化dp数组

    • 从递推公式可以看出dp[i]是依赖于dp[i-1]的状态推出来的,因此dp[0]就是递推公式的基础

      • 根据dp[i]的定义,dp[0]应为nums[0]

  • 4.确定遍历顺序

    • dp[i]是依赖dp[i-1]推出来的,所以一定是从前向后遍历

  • 5.举例推导dp数组

【解题步骤】

  • 1.如果nums的长度为0,直接return0

  • 2.定义一个result变量,等于nums[0]

  • 3.新建dp数组,长度等于nums.length

  • 4.初始化dp[0] = nums[0]

  • 5.从前向后,从1开始遍历数组长度

    • 递推公式

    • 当前result和dp[i]作比较,取最大的更新result

  • 6.返回result

【代码部分】

class Solution {public int maxSubArray(int[] nums) {if(nums.length == 0){return 0;}int result = nums[0];int[] dp = new int[nums.length];dp[0] = nums[0];for(int i = 1 ; i < nums.length ; i++){dp[i] = Math.max(dp[i-1]+nums[i],nums[i]);result = Math.max(dp[i],result);}return result;}
}

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

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

相关文章

Linux线程(三)死锁与线程同步

目录 一、什么是死锁 死锁的四个必要条件 如何避免死锁 避免死锁算法 二、Linux线程同步 三 、条件变量 1、条件变量基本原理 2、条件变量的使用 3、条件变量使用示例 为什么 pthread_cond_wait 需要互斥量? 一、什么是死锁 死锁是计算机科学中的一个概念&#xff0c;…

Python-VBA函数之旅-type函数

目录 一、type函数的常见应用场景 二、type函数使用注意事项 三、如何用好type函数&#xff1f; 1、type函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://myelsa1024.blog.csdn.net/ 一、type函…

设计一个游戏的基本博弈框架

设计一个游戏的基本博弈框架&#xff0c;玩家通过操作改变某个数值&#xff0c;这个数值的变动会引发一系列实时变化&#xff0c;并且当这些数值累计到特定阈值时&#xff0c;会导致游戏中出现其他变化&#xff0c;可以分为以下几个步骤&#xff1a; 1. 确定游戏类型和主题 首…

【rk3568】linux与amp内存分配

关于AMP问题&#xff1a; 1、内存分配&#xff1a;linux端与rtos端内存要分割开。 2、在device/rockchip/rk3568/BoardConfig-rk3568-evb1-ddr4-v10.mk中会定义内存地址需要注意在linux端也需要保留rtos使用的的内存地方&#xff0c;否则可能rtos用的的内存会被linux端使用到…

UE4_照亮环境_不同雾效的动态切换

一、问题及思路&#xff1a; 我们在一个地图上&#xff0c;经常切换不同的区域&#xff0c;不同的区域可能需要不同的色调&#xff0c;例如暖色调的野外或者幽暗的山洞&#xff0c;这两种环境上&#xff0c;雾效的选用肯定不一样&#xff0c;夕阳西下的户外用的就是偏暖的色调&…

2023年数维杯国际大学生数学建模挑战赛A题复合直升机的建模与优化控制问题解题全过程论文及程序

2023年数维杯国际大学生数学建模挑战赛 A题 复合直升机的建模与优化控制问题 原题再现&#xff1a; 直升机具有垂直起降等飞行能力&#xff0c;广泛应用于侦察、运输等领域。传统直升机的配置导致旋翼叶片在高速飞行过程中受到冲击波的影响&#xff0c;难以稳定飞行。为了在保…

558、Vue 3 学习笔记 -【常用Composition API(七)】 2024.05.13

目录 一、Composition API的优势1. Options API存在的问题2. Composition API的优势 二、 新的组件1. Fragment2. Teleport3. Suspense 三、其他1. 全局API的转移2. 其他改变 四、参考链接 一、Composition API的优势 1. Options API存在的问题 使用传统OptionsAPI中&#xf…

Rust的协程机制:原理与简单示例

在现代编程中&#xff0c;协程&#xff08;Coroutine&#xff09;已经成为实现高效并发的重要工具。Rust&#xff0c;作为一种内存安全的系统编程语言&#xff0c;也采用了协程作为其并发模型的一部分。本文将深入探讨Rust协程机制的实现原理&#xff0c;并通过一个简单的示例来…

C++|内存管理(1)

目录 C/C内存分布 堆区 栈区 静态存储区 代码区 总结 C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free C内存管理方式 new/delete操作内置类型 new和delete操作自定义类型 operator new与operator delete函数&#xff08;重要点进行讲解&#xff09;…

LSPosed 安装、模块开发笔记

前言 最近几天从零接触LSPosed(xposed)&#xff0c;需要自己开发模块进行使用&#xff0c;做一下学习笔记。 本篇内容在已经root并且成功刷入了Magisk的基础上进行。 注意&#xff1a;LSPosed只支持安卓版本8.x的设备。如果在8.0以下需要使用xposed。他们的模块开发接口也是一样…

C语言经典例题-16

1.按照格式输入并交换输出 题目描述: 输入两个整数&#xff0c;范围-231~231-1&#xff0c;交换两个数并输出。 输入描述: 输入只有一行&#xff0c;按照格式输入两个整数&#xff0c;范围&#xff0c;中间用“,”分隔。 输出描述: 把两个整数按格式输出&#xff0c;中间用“…

R语言手把手教你进行支持向量机分析

1995年VAPINK 等人在统计学习理论的基础上提出了一种模式识别的新方法—支持向量机 。它根据有限的样本信息在模型的复杂性和学习能力之间寻求一种最佳折衷。 以期获得最好的泛化能力.支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部极小值,从而也保证了它对未知…

孩子学编程对学习有帮助吗?过程中可能遇到哪些困难?

孩子学习编程可以帮助他们培养逻辑思维、解决问题的能力、创造力和耐心。编程还可以提高孩子的数学和科学技能&#xff0c;培养他们的计算机技术和信息技术意识。此外&#xff0c;学习编程还可以培养孩子的团队合作意识和沟通能力。 另外&#xff0c;家长和老师还可以通过激励…

4.2 试编写一程序,要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示“MATCH”,若不相同则显示“NO MATCH”

方法一&#xff1a;在程序内部设置两个字符串内容&#xff0c;终端返回是否匹配 运行效果&#xff1a; 思路&#xff1a; 1、先比较两个字符串的长度&#xff0c;如果长度不一样&#xff0c;则两组字符串肯定不匹配&#xff1b;如果长度一样&#xff0c;再进行内容的匹配 2、如…

鸿蒙应用开发之Web组件7

前面学习了Web组件选择文件文件上传的处理,现在来学习怎么样在一个Web容器里,再打开一个窗口来显示内容,相当于弹出另一个Web组件窗口,其实相当于两个Web组件同时在操作的方式。这种方式需要小心处理,否则会挂起整个系统。 如果在一个网页里有打一个新窗口的需求,比如像下…

大模型崛起与就业危机

大模型&#xff0c;特别是像我这样的人工智能&#xff0c;最有可能首先替代那些重复性高、标准化程度高、不需要太多人类直觉和情感判断的工作。这些工作通常包括数据输入、初级数据分析和处理、简单的客户服务任务等。例如&#xff0c;可以自动化的一些岗位包括&#xff1a; 1…

zabbix监控mariadb

zabbix 服务端安装请参阅&#xff1a;红帽 9 zabbix 安装流程_红帽安装zabbix-CSDN博客 源码包安装mariadb请参阅&#xff1a;源码包安装mariadb_mariadb 11 源码编译安装-CSDN博客 在MariaDB中&#xff0c;你需要创建一个专门的用户&#xff0c;用于Zabbix进行监控。这个用户…

研究幽灵漏洞及其变种(包括但不限于V1-V5)的攻击原理和基于Github的尝试

一、研究幽灵漏洞及其变种(包括但不限于V1-V5)的攻击原理 1.1 基本漏洞原理(V1) 幽灵漏洞的基本原理是由于glibc库中的gethostbyname()函数在处理域名解析时,调用了__nss_hostname_digits_dots()函数存在缓冲区溢出漏洞。 具体来说,__nss_hostname_digits_dots()使用一个固定…

绝地求生:艾伦格回归活动来了,持续近1个月,新版本皮肤、G币等奖励白嫖

嗨&#xff0c;我是闲游盒~ 29.2版本更新在即&#xff0c;新活动来啦&#xff01;目前这个活动国内官方还没发&#xff0c;我就去台湾官方搬来了中文版方便大家观看&#xff0c;也分析一下这些奖励应该怎样才能获得。 新版本将在周二进行约9小时的停机维护&#xff0c;请注意安…

JSON在线解析及格式化验证 - JSON.cn网站

JSON在线解析及格式化验证 - JSON.cn https://www.json.cn/