JS算法-最长连续序列

简介: JS算法-最长连续序列

题目


给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

输入: nums = [100,4,200,1,3,2]
输出: 4
解释: 最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。


题解


第一种


首先判断给定的数组是否为空,如果是则直接返回 0,使用数组的 sort 方法将数组从小到大进行排序,声明三个变量,分别为 countNum、maxItem 和 maxNum。countNum 表示当前连续序列的长度,初始值为 1,maxItem 表示当前位置的元素值,初始值为排序后的数组第一个元素,maxNum 表示最长的连续序列的长度,初始值为 1,使用 for 循环遍历数组,从第二个元素开始遍历,在遍历过程中,如果当前元素值等于 maxItem 加 1,则表示当前元素在连续序列中,countNum 加 1,并将 countNum 与 maxNum 进行比较,更新 maxNum 的值;否则,如果当前元素值不等于 maxItem,则表示当前位置不在连续序列中,将 countNum 的值重置为 1,最后,在遍历完成后,返回 maxNum 的值即可。

    var longestConsecutive = function (nums) {
      if (!nums || !nums.length) return 0;
      nums.sort((a, b) => { return a - b });
      let countNum = 1, maxItem = nums[0], maxNum = 1;
      for (let i = 1; i < nums.length; i++) {
          if (nums[i] == maxItem + 1) {
              countNum++;
              maxNum = countNum > maxNum ? countNum : maxNum;
          } else if (nums[i] != maxItem) {
              countNum = 1;
          }
          maxItem = nums[i]
      }
      return maxNum;
  };


第二种


函数中接收一个数组nums作为参数,首先将数组转换为Set数据结构,并定义一个变量max用于保存最长连续子序列的长度。接着遍历Set中的每个元素num,如果Set中不存在num-1,说明num是一个连续子序列的起始数字。定义一个变量curMax初值为1,表示以num为起始数字的连续子序列长度为1。接着进入while循环,当num+curMax也存在于Set中时,说明连续子序列仍然在继续,将curMax自增1。当num+curMax不在Set中时,说明连续子序列到此结束。将max更新为当前curMax和max中的较大值。遍历结束后,max中保存的就是最长连续子序列的长度。将其返回即可

   var longestConsecutive = function(nums) {
      let set = new Set(nums), max = 0;
      for (num of set) {
          if (!set.has(num - 1)) {
              let curMax = 1;
              while(set.has(num + curMax)) {
                  curMax ++;
              }
              max = Math.max(max, curMax)
          }
      }
      return max
  };
相关文章
|
2月前
|
存储 监控 算法
局域网监控其他电脑的设备信息管理 Node.js 跳表算法
跳表通过分层索引实现O(logn)的高效查询、插入与删除,适配局域网监控中设备动态接入、IP映射及范围筛选等需求,相比传统结构更高效稳定,适用于Node.js环境下的实时设备管理。
125 9
|
4月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
210 0
|
2月前
|
存储 监控 JavaScript
企业上网监控系统的恶意 URL 过滤 Node.js 布隆过滤器算法
布隆过滤器以低内存、高效率特性,解决企业上网监控系统对百万级恶意URL实时检测与动态更新的难题,通过概率性判断实现毫秒级过滤,内存占用降低96%,适配大规模场景需求。
251 3
|
2月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
164 1
|
6月前
|
机器学习/深度学习 算法 数据挖掘
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
|
3月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
248 3
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的XGBoost序列预测算法matlab仿真
基于WOA优化XGBoost的序列预测算法,利用鲸鱼优化算法自动寻优超参数,提升预测精度。结合MATLAB实现,适用于金融、气象等领域,具有较强非线性拟合能力,实验结果表明该方法显著优于传统模型。(238字)
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
|
6月前
|
算法 数据安全/隐私保护
基于混沌序列和小波变换层次化编码的遥感图像加密算法matlab仿真
本项目实现了一种基于小波变换层次化编码的遥感图像加密算法,并通过MATLAB2022A进行仿真测试。算法对遥感图像进行小波变换后,利用Logistic混沌映射分别对LL、LH、HL和HH子带加密,完成图像的置乱与扩散处理。核心程序展示了图像灰度化、加密及直方图分析过程,最终验证加密图像的相关性、熵和解密后图像质量等性能指标。通过实验结果(附图展示),证明了该算法在图像安全性与可恢复性方面的有效性。
|
6月前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于Matlab 2022a/2024b实现,结合灰狼优化(GWO)算法与双向长短期记忆网络(BiLSTM),用于序列预测任务。核心代码包含数据预处理、种群初始化、适应度计算及参数优化等步骤,完整版附带中文注释与操作视频。BiLSTM通过前向与后向处理捕捉序列上下文信息,GWO优化其参数以提升预测性能。效果图展示训练过程与预测结果,适用于气象、交通等领域。LSTM结构含输入门、遗忘门与输出门,解决传统RNN梯度问题,而BiLSTM进一步增强上下文理解能力。