js算法不连续子序列

涉及力扣题目:
1143.最长公共子序列
1035.不相交的线
53. 最大子序和

上一次我们说过如何求连续子序列,解决方法是模拟一个”棋盘“两两相同对撞,又因为是连续所以一定是对角线为上一组相同。这次有点变化,要求是非连续子序列。

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

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

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

若这两个字符串没有公共子序列,则返回 0。

区别在于这里不要求是连续的了。

这里关键的问题其实就是如何得到上一次相同的情况(子序列问题关键就在于如何求前一组数据)。连续的情况自不必多说,那么如果上一次的情况如果不是跟着一次是连在一起那要这么办。我们可以使上一次相同的请况,一行一行一列一列的传下来但是不需要加一毕竟只是传

dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);

只要不是dp[i-1][j-1]就说明字符串没有对上!

其余就和连续子序列相差无异了
完整代码:

const longestCommonSubsequence = (text1, text2) => {let dp = Array.from(Array(text1.length+1), () => Array(text2.length+1).fill(0));for(let i = 1; i <= text1.length; i++) {for(let j = 1; j <= text2.length; j++) {if(text1[i-1] === text2[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];
};

不相交的线:

我们在两条独立的水平线上按给定的顺序写下 A 和 B 中的整数。

现在,我们可以绘制一些连接两个数字 A[i] 和 B[j] 的直线,只要 A[i] ==
B[j],且我们绘制的直线不与任何其他连线(非水平线)相交。

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

上面一排号码,下面一排号码,相同就连线!但是线不能交叉。
这到题算是上一道题的“面试版”,毕竟在出题的时候出题人都希望摆脱应试的标签,让自己的题目显得“有用”。

那么我们来分析:
直线不能相交就已经说明要找按顺序的子序列,毕竟不同顺序就意味着你连线的时候就是会相交!

那么既然是这样就说明跟上一道题是一样一样的了。

完整代码:

const longestCommonSubsequence = (text1, text2) => {let dp = Array.from(Array(text1.length+1), () => Array(text2.length+1).fill(0));for(let i = 1; i <= text1.length; i++) {for(let j = 1; j <= text2.length; j++) {if(text1[i-1] === text2[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];
};

最大子序和:

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

我们最先想到的是前n项肯定结果不能是负值,如果是负值,那就意味着前面的项都是在白加毕竟都是负数了还不如直接归0重新加。那么理解了这点这道题也就可以完美解决了。不管用贪心还是动态规划都很简单。

我们重点来说一下动态规划:
我们可以定义一个数组用来记录 包括下标i(以nums[i]为结尾)的最大连续子序列和为dp[i]。
但是有一点要注意!我们不能直接说最后一项就是最大,毕竟它只记录连续和最大,而这个连续和很有可能不是最大。
但最大肯定在这个数组里
所以只需要使用Math.max

完整代码:

const len = nums.length;let dp = new Array(len).fill(0);dp[0] = nums[0];// 最大值初始化为dp[0]let max = dp[0];for (let i = 1; i < len; i++) {dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);//记录连续最大值,只要最后的结果比当前项大就从第0项从前往后加,否则就直接赋值nums[i]console.log(dp)// 更新最大值max = Math.max(max, dp[i]);}return max;

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

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

相关文章

前端上传图片至OSS

环境&#xff1a;VUE3NODEJS16 一、第一步肯定是引入依赖 在package.json文件中的dependencies加上"ali-oss": "^6.17.1"如下代码所示&#xff1a; //加入后的整体展示"dependencies": {"ali-oss": "^6.17.1"},然后在控制台…

【Delphi 基础知识 22】TStringList 的详细用法

文章目录 TStringList 与TStrings的区别TStringList 常用方法与属性 TStringList 类在Delphi中会经常使用到&#xff0c;我们这里一起来看看 TStringList 的详细用法. TStringList 与TStrings的区别 TStringList 和 TStrings 都是 Delphi 编程语言中用于处理字符串列表的类。它…

Win10升级Win11后卡顿了?

目录 关闭动画效果 任务栏居中改为居左 调整外观和性能 其他 当你看到最后&#xff0c;还知道哪些升级WIN11后必做的优化呢&#xff1f;欢迎在评论区分享出来&#xff01;❤️ win11上市目前也有一段时间了&#xff0c;想必很多大家都已经进行更新了。新的系统确实更加简洁…

安规电容的知识

1、常见安规电容有哪些&#xff1f; 一般我们所说的安规电容也就有两种&#xff0c;一种就是X安规电容&#xff08;X1/X2/X3安规电容&#xff09;&#xff0c;还有一种是Y电容&#xff08;最常见的是Y1和Y2安规电容&#xff09;。 2、x电容的位置 火线零线间的是X电容。x电容用…

Git将某个文件合并到指定分支

企业开发中&#xff0c;经常会单独拉分支去做自己的需求开发&#xff0c;但是某些时候一些公共的配置我们需要从主线pull&#xff0c;这时候整个分支merge显然不合适 1.切换至待合并文件的分支 git checkout <branch>2.将目标分支的单个文件合并到当前分支 git checkou…

力扣刷MySQL-第三弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…

JVM中的垃圾收集算法

标记-清除算法 首先标记出所有需要回收的对象&#xff0c;在标记完成后&#xff0c;统一回收掉所有被标记的对象&#xff0c;也可以反过来&#xff0c;标记存活的对象&#xff0c;统一回收所有未被标记的对象。标记过程就是对象是否属于垃圾的判定过程 缺点 第一个是执行效率…

【算法基础 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理)

文章目录 为什么需要逆元逆元的概念1.单位元2.逆元3.模乘的单位元4.模乘的逆元 开始求逆元1.扩展欧几里得定理2.费马小定理 原文链接 为什么需要逆元 首先&#xff0c;在算法竞赛中&#xff0c;很多情况下会遇到数值很大的数据&#xff0c;这个时候&#xff0c;题目往往会让我…

C# 获取QQ会话聊天信息

目录 利用UIAutomation获取QQ会话聊天信息 效果 代码 目前遇到一个问题 其他解决办法 利用UIAutomation获取QQ会话聊天信息 效果 代码 AutomationElement window AutomationElement.FromHandle(get.WindowHwnd); AutomationElement QQMsgList window.FindFirst(Tr…

4.postman批量运行及json、cvs文件运行

一、批量运行collection 1.各个接口设置信息已保存&#xff0c;在collection中点击run collection 2.编辑并运行集合 集合运行时&#xff0c;单独上传图片时报错。需修改postman设置 二、csv文件运行 可新建记事本&#xff0c;输入测试数据&#xff0c;后另存为新的文本文件&…

Pytest 结合 Allure 生成测试报告

测试报告在项目中是至关重要的角色&#xff0c;一个好的测试报告&#xff1a; 可以体现测试人员的工作量&#xff1b; 开发人员可以从测试报告中了解缺陷的情况&#xff1b; 测试经理可以从测试报告中看到测试人员的执行情况及测试用例的覆盖率&#xff1b; 项目负责人可以通过…

c#之函数

1. 定义一个函数,用来取得数字的和,但是数字的个数不确定 (1) class Program{static int Sum(int[] array){int num 0;for (int i 0; i < array.Length; i){num num array[i];}return num;}static void Main(string[] args){int sum Sum(new int[]{12,13,34,5,68,9,9…

echarts-wordcloud词云

echarts-wordcloud是基于echarts的一个插件&#xff0c;所以我们要首先安装echarts包&#xff0c;然后再安装echarts-wordcloud的包&#xff0c;这里我的练习项目安装的版本&#xff1b;当然&#xff0c;你可以随意安装你需要的版本&#xff1b; “echarts”: “^5.3.3”, “ec…

Hive架构设计

我们知道MapReduce和Spark它们提供了高度抽象的编程接口便于用户编写分布式程序,它们具有极好的扩展性和容错性,能够处理超大规模的数据集。这些计算引擎提供了面向高级语言(比如Java,Python等)的编程接口,然而,考虑到分布式程序编写的复杂性,直接使用这些编程接口实现…

Django中解决跨域问题

同源策略&#xff08;Same origin policy&#xff09;是一种约定&#xff0c;它规定了 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同&#xff0c;如果不一致&#xff0c;请求会发送成功&#xff0c;后端会正常响应&#xff0c;但是浏览器会拦截 …

面试2024.1.20

简单介绍下你做的项目。 这个神领物流项目是一个前后端分离的项目&#xff0c;前段他有3个客户端&#xff08;用户端为微信小程序、司机端和快递员端为app&#xff09;一个管理端&#xff08;pc&#xff09;&#xff0c;后端用的技术栈用的是SpringAlibabaCloud、数据库用的是M…

【精选】中间件 tomcat漏洞复现

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

JRTP实时音视频传输(2)-使用TCP通信的案例

环境搭建等参考&#xff1a;JRTP实时音视频传输(1)-必做的环境搭建与demo测试 1.创建自己的demo 先将example1拷贝为myclienttcp.cpp和myservertcp.cpp cp example1.cpp myclienttcp.cpp cp example1.cpp myservertcp.cpp 改写jrtplib/JRTPLIB/examples/CMakeLists.txt&…

79、avx2 向量指令集优化卷积运算

上一节 介绍了 avx2 向量指令集中的 load/store 操作,本节介绍如何使用 avx2 的向量指令集来实现乘累加运算。 因为我们实战中用到的 resnet50 神经网络中,卷积运算在整个模型中的比例占据是相当高,而卷积运算的核心计算就是乘累加计算。因此,只要将最核心的乘累加计算效率…

2024成都线路板展览会|全国线路板展

时 间&#xff1a;2024年7月17&#xff5e;19日 地 点&#xff1a;成都世纪城新国际会展中心 ◆ 》》》展会概况&#xff1a; 电路板是电子产品的关键电子互联件&#xff0c;被誉为“电子产品之母”。电路板行业作为电子信息产业中重要的组成部分&#xff0c;受到国家产…