LeetCoda 打卡day53--动态规划之最长子序列

一个人的朝圣 — LeetCode打卡第52天

  • 知识总结
  • Leetcode 1143. 最长公共子序列
    • 题目说明
    • 代码说明
  • Leetcode 53. 最大子数组和
    • 题目说明
    • 代码说明
  • Leetcode 1035. 不相交的线
    • 题目说明
    • 代码说明


知识总结

今天几道最长子序列的题目, 都可以用一个固定的模版完成. 理解其中递推公式的含义


Leetcode 1143. 最长公共子序列

题目链接

题目说明

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

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

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

在这里插入图片描述

代码说明

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

Leetcode 53. 最大子数组和

题目链接

题目说明

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

子数组 是数组中的一个连续部分。
在这里插入图片描述

代码说明

这道题还是当时蚂蚁暑期实习时面试官现场出的题
递推公式为:

dp[i] = Math.max(dp[i-1]+nums[i], nums[i]); 要么算上以前的, 要么自立门户重新开始

class Solution {public int maxSubArray(int[] nums) {int len = nums.length;int[] dp = new int[len];dp[0] = nums[0];int resutl = nums[0];for(int i = 1; i < len; i++){dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);resutl = Math.max(resutl, dp[i]);}// System.out.println(Arrays.toString(dp));return resutl;}
}

当然用两个变量可以代替dp数组

class Solution {public int maxSubArray(int[] nums) {int maxSoFar = nums[0];int maxResult = nums[0];for (int i = 1; i < nums.length; i++){maxSoFar = Math.max(maxSoFar + nums[i], nums[i]);maxResult = Math.max(maxResult, maxSoFar);}return maxResult;}
}

Leetcode 1035. 不相交的线

题目链接

题目说明

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

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

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

以这种方法绘制线条,并返回可以绘制的最大连线数。

在这里插入图片描述

代码说明

换了一种问法, 其实思想还是去找最长的公共子序列. 代码基本上一模一样.

class Solution {public int maxUncrossedLines(int[] nums1, int[] nums2) {int l1 = nums1.length, l2 = nums2.length;int[][] dp = new int[l1+1][l2+1];for(int i = 1; i <= l1; i++){for(int j = 1; j <=l2; 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]);}}// System.out.println(Arrays.toString(dp[i]));}return dp[l1][l2];}
}

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

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

相关文章

float:right 浮动布局后怎么清除浮动对后面元素的影响

1 用overflow:hidden和overflow:auto 在父元素上 2 用伪元素进行清除浮动 ::after

Retrofit注解

1. 注解类型 Retrofit路径结合的规则 2. 网络请求方法 2.1 Get请求 完整地址&#xff1a;http://mock-api.com/2vKVbXK8.mock/getUserInfo?iduserid 2.1.1 Query 创建Retrofit实例必须传入baseurl(http://mock-api.com/2vKVbXK8.mock/)&#xff0c;在GET("getUserIn…

港科夜闻|香港科大(广州)与特斯联共建研究中心,打造国际领先的创新联合体...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大(广州)与特斯联共建研究中心&#xff0c;打造国际领先的创新联合体。6月27日&#xff0c;“数字世界”联合研究中心正式揭牌成立&#xff0c;这个由香港科大(广州)与特斯联共同打造的研究中心&#xff0c;旨在推…

Chrome 插件开发覆写xhr请求

这几天搞chrome谷歌浏览器插件遇到个问题 我想拦截网页请求&#xff0c;并把数据传递到下一个子窗口。获取responsebody内容 background.js 单纯靠sendmessage实现不了通讯 chrome.runtime.sendMessage({data: e.data.responseText,type:ajaxResponse}); 最开始的时候想用chr…

qt QSqlRelationalTableModel 详解

背景知识&#xff1a; Qt SQL的API分为不同层&#xff1a; 驱动层 驱动层 对于QT是基于C来实现的框架&#xff0c;该层主要包括QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorbase、QSqlDriverPlugin and QSqlResult。这一层提供了特定数据库和SQL API层之间的底层桥梁…

【Jvm】Java类加载机制是什么?

文章目录 一、目标&#xff1a;二、原理 &#xff08;类的加载过程及其最终产品&#xff09;三、过程&#xff08;类的生命周期&#xff09;3.1、加载3.2、校验3.3、准备3.4、解析3.5、初始化 四、类加载器五、双亲委派机制 一、目标&#xff1a; 什么是类的加载&#xff1f;类…

VueX笔记

vuex是vue的一个插件&#xff0c;是一种组间通信的方式&#xff0c;整个项目可以共享数据和方法 安装&#xff1a; npm i vuex3 如上图所示&#xff0c;如果需求非常简单&#xff0c;我们就可以绕过dispatch方法&#xff0c;直接去调用commit方法 dispatch方法用于编写业务代…

短视频seo矩阵+抖音小程序SaaS源码开发部署

一、抖音小程序技术开发和调试&#xff1a; }$type_list_single array_column($type_list,title,type);$this->output[now_type] $type;$this->output[type_list] $type_list;$this->output[type_list_single] $type_list_single;//获取素材组合信息$pailie_m…

【Django学习】(九)自定义校验器_单字段_多字段校验_模型序列化器类

之前学习了视图集里运用序列化器进行序列化和反序列化操作&#xff0c;定义序列化器类&#xff0c;需要继承Serializer基类或者Serializer的子类&#xff1b; 这次我们将学习如何自定义校验器、如何进行单字段或者多字段校验&#xff0c;最后初步使用模型序列化器 一、自定义…

YOLOv8训练和预测

目录 1.源码下载 2.环境配置 3. 数据集准备 4.训练配置 5.训练时遇到的错误 1.源码下载 GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > CoreML > TFLite 2.环境配置 运行环境需要的包和YOLOv5/v7一样&#xff0c;这里不…

建立时间保持时间、亚稳态

2.1建立时间和保持时间 2.1.1 D触发器的结构&#xff08;两个电平触发的D触发器&#xff09; 沿触发的触发器也叫主从触发器&#xff0c;内部是由两个电平触发的D触发器构成的上升沿是由低电平变成高电平 低电平&#xff1a;FF1导通&#xff0c;数据从D到G1&#xff0c;建立时…

CDH yarn Fair 队列最大资源使用限制,任务无法提交

一、问题背景描述 1.任务提交异常日志 2023-06-29 15:48:20,877 INFO org.apache.flink.yarn.YarnClusterDescriptor [] - Deployment took more than 60 seconds. Please check if the requested resources are available in the YARN cluster 2023-06-29 15:48:21,129 IN…