day53【子序列】1143.最长公共子序列 1035.不相交的线 53.最大子序和

文章目录

  • 1143. 最长公共子序列
  • 1035.不相交的线
  • 53. 最大子序和

1143. 最长公共子序列

  • 题目链接:力扣链接

  • 讲解链接:代码随想录讲解

  • 题意:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。

    一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

    例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。
    两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

      示例 1:输入:text1 = "abcde", text2 = "ace" 输出:3  解释:最长公共子序列是 "ace" ,它的长度为 3 。示例 2:输入:text1 = "abc", text2 = "abc"输出:3解释:最长公共子序列是 "abc" ,它的长度为 3 。示例 3:输入:text1 = "abc", text2 = "def"输出:0解释:两个字符串没有公共子序列,返回 0 。
    
  • 思路
    dp数组代表第i-1和j-1为结尾的最长公共子序列的长度。
    所以在遍历中,for的条件要写从1开始遍历,循环条件为<=length;循环体中,如果当前字母相同,那结果就是前一个状态的dp+1;如果当前字母不是相同的,那结果就看前一个i和当前j / 前一个j和当前i中的最大值。

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

1035.不相交的线

  • 力扣题目链接

  • 代码随想录讲解

  • 题意:在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。

    现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:

    nums1[i] == nums2[j]
    且绘制的直线不与任何其他连线(非水平线)相交。
    请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。

    以这种方法绘制线条,并返回可以绘制的最大连线数。
    在这里插入图片描述
    示例 2:
    输入:nums1 = [2,5,1,2,5], nums2 = [10,5,2,1,5,2]
    输出:3

      示例 3:输入:nums1 = [1,3,7,1,7,5], nums2 = [1,9,2,5,1]输出:2
    
  • 思路:和1143是一样的,求最长公共子序列即可。按照顺序相等的就不会出现线相交的情况。

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

53. 最大子序和

  • 力扣题目链接

  • 代码随想录讲解链接

  • 题意:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    子数组 是数组中的一个连续部分。

      示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例3:输入:nums = [5,4,-1,7,8]输出:23
    
  • 贪心算法
    局部最优:当前的连续和为负数的时候就要立刻放弃,此时从下一个元素开始重新计算连续和。因为负数加上下一个元素,连续和只会越来越小。
    全局最优:选取最大的连续和

class Solution {public int maxSubArray(int[] nums) {//动态规划int count = 0;int res = Integer.MIN_VALUE;for(int i = 0; i < nums.length; i++) {count += nums[i];res = Math.max(count, res);if(count < 0) { //如果此时的连续和为负数了,那就从下一个元素从新计算。上一个开头的元素的最大连续和已经保存在res中了,就看后面有没有比这个更大的值了。count = 0;}}return res;}
}
  • 动态规划
    dp由两个方向推来,要么是前一种状态+当前元素,要么是从当前元素开始计算连续子序和,这两种情况选最大的
class Solution {public int maxSubArray(int[] nums) {//以i结尾的最大连续子数组的最大和int[] dp = new int[nums.length+1];dp[0] = nums[0];int res = dp[0];for(int i = 1; i < nums.length; i++) {//dp要么是从前一个状态推过来的,要么是自己从头开始算dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);res = Math.max(res, dp[i]);}return res;}
}

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

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

相关文章

微信自动回复有什么好处?怎么设置?

微信自动回复有什么好处&#xff1f; 首先&#xff0c;它可以帮助我们节省时间和精力。当我们无法立即回复消息时&#xff0c;自动回复可以及时告知对方我们的状况&#xff0c;避免对方的焦虑和不便。 其次&#xff0c;自动回复可以增强沟通效率。无论是工作还是个人生活中&a…

gtsam初探以及结合LIO-SAM算法的一些理解

概述 GTSAM&#xff08;Georgia Tech Smoothing and Mapping&#xff09;是基于因子图的C库&#xff0c;本篇基于GTSAM对因子图优化做一个简单了解和梳理&#xff0c;并以LIO-SAM为例进一步分析因子图优化在SLAM中的应用。 参考链接&#xff1a; [0]gtsam官方文档 [1]https:/…

mongo常用操作符及查询例子

比较操作符&#xff1a; $eq&#xff1a;匹配字段值等于指定值。 $ne&#xff1a;匹配字段值不等于指定值。 $gt&#xff1a;匹配字段值大于指定值。 $gte&#xff1a;匹配字段值大于或等于指定值。 $lt&#xff1a;匹配字段值小于指定值。 $lte&#xff1a;匹配字段值小于或等…

最小化安装移动云大云操作系统--BCLinux-R8-U2-Server-x86_64-231017版

有个业务系统因为兼容性问题&#xff0c;需要安装el8.2的系统&#xff0c;因此对应安装国产环境下的BCLinuxR8U2系统来满足用户需求。BCLinux-R8-U2-Server是中国移动基于AnolisOS8.2深度定制的企业级X86服务器通用版操作系统。本文记录在DELL PowerEdge R720xd服务器上最小化安…

Redis-分布式锁

Redis-setnx实现分布式锁 Redis实现分布式锁主要利用Redis的setnx命令。setnx是SET if not exists(如果不存在&#xff0c;则SET)的简写。(NX是互斥、EX是设置超时时间) 但是如上会面临一个问题&#xff0c;当业务执行时间太长&#xff0c;导致业务还没执行完锁已到期&#xf…

Flask三种文件下载方法

Flask 是一个流行的 Python Web 框架&#xff0c;它提供了多种方法来实现文件下载。在本文中&#xff0c;我们将介绍三种不同的方法&#xff0c;以便你能够选择最适合你应用程序的方法。 方法一&#xff1a;使用 send_file 函数 send_file 函数是 Flask 中最常用的文件下载方法…

令人深刻的c#工具和库

为了方便大家开发&#xff0c;介绍一些库和框架。 框架 CAP - 具有本地持久消息功能的EventBus&#xff0c;用于SOA或微服务架构中的系统集成。Cinchoo ETL - .NET的ETL框架&#xff08;用于CSV&#xff0c;Flat&#xff0c;Xml&#xff0c;JSON&#xff0c;键值格式文件的分…

CentOS开机自动运行jar程序实现

前面已经有一篇文章介绍jar包如何在CentOS上运行&#xff0c;《在linux上运行jar程序操作记录》 后来发现系统重启后不能自动运行&#xff0c;导致每次都要手动打开&#xff0c;这篇介绍如何自动开机启动运行jar程序。 一、找到JDK程序执行位置 [rootlocalhost /]# which jav…

2.Vue3项目(二):vue项目创建,项目必需的基础依赖配置,项目集成各种第三方依赖

目录 一、环境配置 1.下载node.js 2.pnpm的配置 二、创建项目 1.先创建好项目文件夹

【开题报告】基于 Spring Boot 的在线预约导游系统的设计与实现

1.引言 在旅游行业中&#xff0c;导游起到了重要的作用&#xff0c;他们为游客提供了专业的旅游服务和相关信息。然而&#xff0c;传统的导游预约方式可能存在一些问题&#xff0c;如信息不透明、预约流程繁琐等。因此&#xff0c;我们计划开发一个基于 Spring Boot 的在线预约…

学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理

Configmap概述 Configmap概述Configmap能解决哪些问题&#xff1f;Configmap应用场景局限性 Configmap创建方法命令行直接创建通过文件创建指定目录创建configmap 编写configmap资源清单YAML文件使用Configmap通过环境变量引入&#xff1a;使用configMapKeyRef通过环境变量引入…

Azure机器学习 - 在 Azure 机器学习中上传、访问和浏览数据

目录 一、环境准备二、设置内核三、下载使用的数据四、创建工作区的句柄五、将数据上传到云存储空间六、访问笔记本中的数据七、创建新版本的数据资产八、清理资源 机器学习项目的开始阶段通常涉及到探索性数据分析 (EDA)、数据预处理&#xff08;清理、特征工程&#xff09;以…

Flutter 使用 dio 遇到的问题合集

泪流满面啊&#xff0c;&#xff0c;&#xff0c;&#xff0c;&#xff0c; 1. postHttpLogin-异常-----DioException [bad response]: The request returned an invalid status code of 500. /// 错误代码如下&#xff1a;Future<String?> postHttpLogin(String textC…

Java 项目 服务器 日志配置

最近 在搞一个0-1的项目 就想把 服务器日志配置 记录一下 我们使用的是 单体微服务项目 首先你需要一个xml <?xml version"1.0" encoding"UTF-8"?> <configuration><!--定义日志存放的位置--><springProperty scope"context&…

Java语法 - 01

Java基础 Java 是一种广泛使用的高级编程语言&#xff0c;最初由Sun Microsystems于1995年发布。它被设计为具有简单、可移植和面向对象的特性&#xff0c;以满足跨平台应用程序开发的需求。以下是一些关于 Java 的简介&#xff1a; 跨平台性&#xff1a;Java 程序可以在不同…

基于QT的简易计算器(一)

目录 0 简介1.设计原理1.1界面设计1.1.1界面基本布局1.1.2 界面调整和美化1.1.2 控件重命名 1.2 连接信号和槽1.3 软件逻辑1.3.1四则运算1.3.2 连续运算&#xff08;不完全&#xff09;的原理1.3.3 清屏1.3.4 退格1.3.5 等于1.3.6 小数点 2.总结与拓展 0 简介 最近在学QT&…

Django实战项目-学习任务系统-自定义URL拦截器

接着上期代码框架&#xff0c;6个主要功能基本实现&#xff0c;剩下的就是细节点的完善优化了。 首先增加URL拦截器&#xff0c;你不会希望没有登录用户就可以进入用户主页各种功能的&#xff0c;所以增加URL拦截器可以解决这个问题。 Django框架本身也有URL拦截器&#xff0…

el-dialog点击esc退出时如何清除数据,如何触发方法

例如下面的el-dialog <el-dialog :title"title" :visible.sync"open" width"1400px" append-to-body close"handleDialogClose">...</el-dialog>当:visible.sync的时候才能键盘esc控制关闭窗口 当close的时候,键盘esc关闭…

12504 - Updating a Dictionary (UVA)

题目链接如下&#xff1a; Online Judge 我的代码如下&#xff1a; #include <string> #include <iostream> #include <map> #include <set> // #define debugint T, loc1, loc2; std::string s, key, value; char ch[] "-*";int main()…

Linux 中 initcall 机制详解

源码基于&#xff1a;Linux 5.4 0. 前言 Linux 对驱动程序提供静态编译进内核和动态加载两种方式&#xff0c;当采用静态方式时&#xff0c;开发者如果想要在系统中启动这个驱动通常调用类似 xxx_init() 接口。 最直观的做法&#xff1a;开发者试图添加一个驱动初始化程序时&…