【JS】最长递增子序列算法

最长递增子序列问题(Longest Increasing Subsequence,简称LIS)是指在一个序列中找到一个最长的子序列,使得这个子序列中的元素是递增的。比如序列 [10, 9, 2, 5, 3, 7, 101, 18] 的最长递增子序列为 [2, 3, 7, 18],长度为 4。

好的,下面是一种基于动态规划的 JavaScript 实现最长递增子序列算法的方法

function lengthOfLIS(nums) {const n = nums.length;if (n === 0) return 0;const dp = new Array(n).fill(1); // 初始化每个元素为1,因为每个元素都构成长度为1的LISfor (let i = 1; i < n; i++) { // 从第二个元素开始遍历for (let j = 0; j < i; j++) { // 遍历i之前的所有元素if (nums[j] < nums[i]) { // 如果nums[j] < nums[i],说明nums[i]可以加入到以nums[j]结尾的LIS中dp[i] = Math.max(dp[i], dp[j] + 1); // 更新以nums[i]结尾的LIS的长度}}}return Math.max(...dp); // 返回dp数组中的最大值
}

这个算法使用了两层循环。外层循环遍历整个数组,内层循环则去遍历当前元素之前的所有元素。如果某个元素小于当前元素,则说明当前元素可以加入到以该元素结尾的 LIS 中,此时更新以当前元素结尾的 LIS 的长度。最后返回 dp 数组中的最大值即可。

这种算法的时间复杂度为 O(n^2)。如果序列的长度不是特别大,这个算法已经足够快了。如果需要优化时间复杂度,可以使用二分查找等方法,但是相应的实现就会更加复杂。

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

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

相关文章

用Python制作数据可视化仪表盘:使用Dash与Plotly构建实时交互式仪表盘

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在数据驱动的世界中,可视化是理解和解释复杂数据的关键工具。通过数据可视化,用户能够快速洞察数据趋势,做出明智决策。而仪表盘作为一种高度集成的可视化工具,能够将多种数据图表汇总到一个界面上,便于实时…

【微信小程序前端开发】入门Day03 —— 页面导航、事件、生命周期、WXS 脚本及自定义组件

1. 页面导航 导航方式 声明式导航&#xff1a;使用<navigator>组件实现页面跳转。 <!-- 导航到tabBar页面 --> <navigator url"/pages/message/message" open-type"switchTab">导航到消息页面</navigator><!-- 导航到非tabBar页…

五款专业三维数据处理工具:GISBox、Cesiumlab、OSGBLab、灵易智模、倾斜伴侣深度解析

随着三维数据处理技术的广泛应用&#xff0c;尤其是在城市规划、地理信息系统&#xff08;GIS&#xff09;、工程监测等领域&#xff0c;处理倾斜摄影、三维建模以及大规模数据管理的需求日益增加。以下是五款我精心挑选的倾斜摄影和三维数据处理工具——GISBox、Cesiumlab、OS…

Debezium系列之:Debezium 3.0.0.Final发布

Debezium系列之:Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标MariaDB连接器的更改版本 11.4.3 支持MongoDB连接器的更改MongoDB sink connectorMySQL连接器的改变MySQL 9MySQL向量数据类型Oracle连接…

Vue3入门学习

Vue3入门学习 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options…

每日学习一个数据结构-AVL树

文章目录 概述一、定义与特性二、平衡因子三、基本操作四、旋转操作五、应用场景 Java代码实现 概述 AVL树是一种自平衡的二叉查找树&#xff0c;由两位俄罗斯数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明。想了解树的相关概念&#xff0c;请点击这里。以下是对AVL树的…

如何让本地GGUF模型通过Ollama进行管理和推理

Ollama 除了通过从支持模型列表中 pull 的下载模型方式&#xff0c;也支持手动导入GGUF模型。 关键是需要创建一个 Modelfile 文件&#xff0c;和将项目打包成docker image的过程有点类似。 Modelfile 内容的创建可以参考通过 ollama pull 命令拉取的模型对应的 Modelfile &…

YOLO11改进|注意力机制篇|引入NAM注意力机制

目录 一、【NAM】注意力机制1.1【NAM】注意力介绍1.2【NAM】核心代码 二、添加【NAM】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【NAM】注意力机制 1.1【NAM】注意力介绍 下图是【NAM】的结构图&#xff0c;让我们简单分…

微服务实战——注册功能

注册 1.1. 配置 Configuration public class GulimallConfig implements WebMvcConfigurer {/*** 视图映射* param registry*/Overridepublic void addViewControllers(ViewControllerRegistry registry) {/*** GetMapping("/login.html")* public String …

C++ day04(友元 friend、运算符重载、String字符串)

目录 【1】友元 friend 1》概念 2》友元函数 3》友元类 4》友元成员函数 【2】运算符重载 1》概念 2》友元函数运算符重载 ​编辑 3》成员函数运算符重载 4》赋值运算符与类型转换运算符重载 5》注意事项 【3】String 字符串类 【1】友元 friend 1》概念 定义&#x…

YOLOv5改进——添加SimAM注意力机制

目录 一、SimAM注意力机制核心代码 二、修改common.py 三、修改yolo.py ​三、建立yaml文件 四、验证 一、SimAM注意力机制核心代码 在models文件夹下新建modules文件夹&#xff0c;在modules文件夹下新建一个py文件。这里为simam.py。复制以下代码到文件里面。 import…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.7-2.8

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第二周 深度卷积网络&#xff1a;实例探究&#xff08;Deep convolutional models: case studies&#xff09;2.7 Inception 网络&#xff08;Inception network&#xff09;2.8 使 用 开 源 …

【Linux】 TCP短服务编写和守护进程

文章目录 TCP 短服务编写流程进程组和会话和守护进程 TCP 短服务编写流程 TCP服务器是面向连接的&#xff0c;客户端在发送数据之前需要先与服务器建立连接。 因此&#xff0c;TCP服务器需要能够监听客户端的连接请求。为了实现这一功能&#xff0c;需要将TCP服务器创建的套接字…

75. 颜色分类

思路 先排最小的数&#xff0c;将最小的数都放至列表前面 则0~r-1都是最小值 从r到len(nums)-1继续进行排序&#xff0c;从尾部开始&#xff0c;将最大值放置尾部 class Solution(object):def sortColors(self, nums):""":type nums: List[int]:rtype: None …

Python | Leetcode Python题解之第468题验证IP地址

题目&#xff1a; 题解&#xff1a; class Solution:def validIPAddress(self, queryIP: str) -> str:if queryIP.find(".") ! -1:# IPv4last -1for i in range(4):cur (len(queryIP) if i 3 else queryIP.find(".", last 1))if cur -1:return &q…

Window系统编程 - 文件操作

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天主要介绍使用windows系统编程操作读写文件 文件 CreateFile()函数讲解 介绍:该函数用于打开文件或者I/O流设备&#xff0c;文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot 和…

Jenkins Pipline流水线

提到 CI 工具&#xff0c;首先想到的就是“CI 界”的大佬--]enkjns,虽然在云原生爆发的年代,蹦出来了很多云原生的 CI 工具,但是都不足以撼动 Jenkins 的地位。在企业中对于持续集成、持续部署的需求非常多,并且也会经常有-些比较复杂的需求,此时新生的 CI 工具不足以支撑这些很…

看门狗电路设计

看门狗电路设计 看门狗是什么应用架构图TPV6823芯片功能硬件时序图为什么要一般是要保持200个毫秒左右的这种低电平的时间看门狗电路实际应用与条件 看门狗是什么 硬件看门狗芯片&#xff0c;Watch DogTimer&#xff0c;可用于受到电气噪音、电源故障、静电放电等影响(造成软件…

LSTM(长短时记忆网络)

一、引言 在处理序列数据时&#xff0c;循环神经网络&#xff08;RNN&#xff09;虽然能够处理序列数据并保留历史信息&#xff0c;但在实践中发现它对于捕捉长时间依赖关系的能力有限&#xff0c;尤其是在训练过程中容易遇到梯度消失或梯度爆炸的问题。为了解决这些问题&…

力扣1031. 两个非重叠子数组的最大和

力扣1031. 两个非重叠子数组的最大和 题目解析及思路 题目要求找到两段长分别为firstLen 和 secondLen的子数组&#xff0c;使两段元素和最大 图解见灵神 枚举第二段区间的右端点&#xff0c;在左边剩余部分中找出元素和最大的第一段区间&#xff0c;并用前缀和优化求子数组…