【代码随想录算法训练营第五十天|1143.最长公共子序列、1035.不相交的线、53.最大子数组和、392.判断子序列】

文章目录

  • 1143.最长公共子序列
  • 1035.不相交的线
  • 53.最大子数组和
  • 392.判断子序列

1143.最长公共子序列

和最长连续子序列的区别是,除了在text1[i]==text2[j]的时候要令dp[i][j] = dp[i-1][j-1] + 1之外,在不相等的时候dp[i][j]同样需要赋值,在text1和text2分别不考虑当前元素时剩下的子序列的最大公共子序列长度赋给dp[i][j]。

class Solution:
    def longestCommonSubsequence(self, text1: str, text2: str) -> int:
        len1 = len(text1)
        len2 = len(text2)
        dp = [[0]*(len2+1) for _ in range(len1+1)] # dp[i][j]表示的是text1[:i-1]和text[:j-1]中的最长公共子序列
        ans = 0
        for i in range(1, len1+1):
            for j in range(1, len2+1):
                if text1[i-1] == text2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i][j-1], dp[i-1][j])
                if dp[i][j] > ans:
                    ans = dp[i][j]
        return ans

1035.不相交的线

和上一题一样的,都是找最大的公共子序列(连线只能全下右或者全下左,但是本质上是同样的排列顺序的子序列,所以和上题一样。

class Solution:
    def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:
        len1 = len(nums1)
        len2 = len(nums2)
        dp = [[0]*(len2+1) for _ in range(len1+1)]
        ans = 0
        for i in range(1, len1+1):
            for j in range(1, len2+1):
                if nums1[i-1] == nums2[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i][j-1], dp[i-1][j])
                if dp[i][j] > ans:
                    ans = dp[i][j]
        return ans

53.最大子数组和

dp数组表示前i位数组的最大子数组和,dp[i-1]+nums[i]表示的是前面连续的最大数组和加上该位的值,与这个相比较的是nums[i],因为如果dp[i-1]为负数则需要丢弃前面的部分,从nums[i]重新开始计算。

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        dp = [0] * len(nums)
        dp[0] = nums[0]
        for i in range(1, len(nums)):
            dp[i] = max(nums[i], dp[i-1]+nums[i])
        return max(dp)

392.判断子序列

和上面也基本一致,就是最后统计一下最大公共子序列长度和s的长度是否一致,还有一个就是在两个元素不相等的时候,dp[i][j]的值取的是在同一个s的元素下,去匹配的上一个t的子字符串的dp值。

class Solution:
    def isSubsequence(self, s: str, t: str) -> bool:
        dp = [[0]*(len(t)+1) for _ in range(len(s)+1)]
        for i in range(1, len(s)+1):
            for j in range(1, len(t)+1):
                if s[i-1] == t[j-1]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = dp[i][j-1]
        return dp[-1][-1] == len(s)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数值稳定性、模型初始化和激活函数

一、数值稳定性:神经网络很深的时候数据非常容易不稳定 1、神经网络梯度 h^(t-1)是t-1层的输出,也就是t层的输入,y是需要优化的目标函数,向量关于向量的倒数是一个矩阵。 2、问题:梯度爆炸、梯度消失 (1&…

OpenAI“断供”对我们的影响之我见

1.新闻 OpenAI决定于7月关闭国内GPT访问 近日,美国人工智能公司OpenAI宣布,将于7月起关闭对中国内地的GPT访问,此举引发了业内广泛关注和讨论。以下是关于此新闻的具体信息: 关闭时间:OpenAI官方推送的邮件指出&…

Leaflet【五】Marker点闪烁效果

控制点的透明度 在创建marker的构造当中会传递一个配置对象,这个里面就可以配置对应的透明度opacity,那么只需要去修改这个透明度的值就好了。通过定时器去一直改值即可。 const changeOpacity (entity) > {let i 1;let int setInterval(() >…

谷歌发布两款新Gemma 2大语言模型;阿里云开源Qwen2-72B模型荣登榜首

🦉 AI新闻 🚀 谷歌发布两款新Gemma 2大语言模型 摘要:谷歌发布Gemma 2大语言模型,包括90亿和270亿参数两种版本。Gemma 2在推理性能、效率和安全性上较第一代有显著提升。27B模型的性能媲美更大规模的主流模型,且部署…

【C++题解】1721. 输出个位为5或者个位为8数

问题:1721. 输出个位为5或者个位为8数 类型:简单循环 题目描述: 请从小到大输出 1∼n 中所有个位为 5 或者个位为8 的所有的整数,每行 1 个。 比如,假设 n20,那么满足条件的数输出如下: 5 8 1…

尊重·理解·协同:论团队合作中的认知提升与信誉建设

零、背景 为什么写博客? 给自己灌输大道理—唠叨哲学 定期总结:反思这段时间内的生活、学习或工作中的得失,提炼出具有普适性的经验和教训。 紧跟热点新闻来有点流量 独特视角:尽量优先进行——人云亦云,先学某一…

MQTT遗嘱信息(2)

接前一篇文章:MQTT遗嘱信息(1) 本文内容参考: 什么是MQTT遗嘱消息?如何配置和处理遗嘱消息?_mqtt last will-CSDN博客 MQTT 协议学习:Retained(保留消息) 与 LWT&#x…

Stream Lua Nginx Module 插件一键安装

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

Linux容器篇-Docker容器的使用

文章目录 前言一、Docker的安装主机环境准备关闭防火墙关闭selinux时间同步关闭 swap配置操作系统yum源配置国内Docker-ce镜像源注意 二、安装docker-ce三、配置镜像加速器阿里云镜像加速器生成 四、Docker的使用Docker 客户端获取镜像启动容器查看所有的容器:启动已…

内外网共享文件最优方案,了解一下

基于安全性、合规性、数据防泄漏等原因,为了保护核心数据,企业一般会做内外网隔离,隔离后仍存在数据交换共享的需求。数字化时代,数据的流通与共享成为企业和团队之间日常运营的关键环节。内外网共享文件是指在内网和外网之间共享…

【知识学习】阐述Unity3D中动画渲染的概念及使用方法示例

Unity3D中的卡通渲染(Cartoon Rendering)是一种渲染技术,它模仿传统手绘动画或漫画的视觉效果。这种渲染风格通常具有鲜明的颜色、清晰的轮廓线和简化的光影效果,常用于制作动画、游戏和其他视觉媒体。 卡通渲染的基本概念 轮廓…

绩效管理过程中,定性指标的设计评价怎么做?

导读:企业在设计具体的定性考核标准时,可以运用一些量化的方式,使得最终的考核更具针对性和操作性,但是定性指标不可能完全量化分析,管理者不能过度追求量化原则,设计一些无效的指标。 绩效管理过程中&…

03逻辑门电路

分立门电路: 集成门电路: TTL门电路 MOS门电路:NMOS门电路、PMOS门电路、CMOS门电路 BICMOS门电路:CMOS的高输入阻抗和TTL的高放大倍数的结合 向更低功耗、更高速度发展 MOS管的Rdson在可变电阻区的阻值也一般会小于1000欧姆 …

django学习入门系列之第三点《伪类简单了解》

文章目录 hover&#xff08;伪类&#xff09;after&#xff08;伪类&#xff09;往期回顾 hover&#xff08;伪类&#xff09; 伪类指的是用冒号加的 hover样式指的是&#xff0c;当用户光标移动到设定区域后&#xff0c;所执行的用法 如&#xff1a; <!DOCTYPE html>…

并发编程工具集——Lock和Condition(上)(十二)

简述&#xff1a;Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程&#xff0c;其中 Lock 用于解决互斥问题&#xff0c;Condition 用于解决同步问题。 再造管程的理由和期望 理由&#xff1a;synchronized 没有办法解决“破坏不可抢占条件方案”。 原因是synchroniz…

Java NIO Buffer概念

针对每一种基本类型的 Buffer &#xff0c;NIO 又根据 Buffer 背后的数据存储内存不同分为了&#xff1a;HeapBuffer&#xff0c;DirectBuffer&#xff0c;MappedBuffer。 HeapBuffer 顾名思义它背后的存储内存是在 JVM 堆中分配&#xff0c;在堆中分配一个数组用来存放 Buffe…

springboot基于web模式的师资管理系统的设计与实现-计算机毕业设计源码040928

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设师资管理系统 。 本设…

全球视角下的AI安全挑战:面向未来的准备

云安全联盟大中华区即将推出人工智能安全认证专家&#xff08;Certified Artificial Intelligence Security Professional&#xff0c;CAISP&#xff09;培训及认证计划&#xff0c;将在Q3全面上线。 在全球科技创新的洪流中&#xff0c;人工智能&#xff08;AI&#xff09;无…

vue3.0(十五)状态管理vuex和pinia

文章目录 状态管理vuex1. 什么情况下应该使用 Vuex2. vuex的安装3. vuex的五大属性4. vuex的五大属性在组件中的应用5. 数据持久化 pinia1.Pinia 对比 Vuex2.安装及引入3.三大属性4.三大属性在组件中的运用总结 状态管理 状态管理是指对Vue.js应用中的数据进行统一管理的一种机…

【.Net】Web项目部署腾讯云

文章目录 总述前置准备docker-compose部署普通部署 参考 总述 前置准备 云服务添加端口 另有linux本身防火墙请参考&#xff1a; 【Linux】防火墙命令 需安装.Net SDK和Asp .Net Runtime 注意&#xff1a; 1、sdk也要不只是runtime 2、是Asp .Net Runtime不是.Net Runtime …
最新文章