JS算法-寻找峰值

简介: JS算法-寻找峰值

题目


给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

输入: nums = [1,2,3,1]
输出: 2
解释: 3 是峰值元素,你的函数应该返回其索引 2。


题解


第一种


首先定义了一个常量minv,它表示负无穷,用来表示数组边界情况。然后获取了数组的长度n和左右指针l和r的初始值,l为0,r为n-1,然后进入while循环,循环的条件是左指针小于右指针。在循环中,首先计算出中间值m,采用位运算符的方式避免了使用除法操作,然后分别计算出中间值左右两侧的值lv和rv。由于边界情况的存在,需要判断m是否在数组的边界内,如果在边界外则使用minv表示,接着判断中间值m是否为峰值元素,即q[m]是否大于其左右两侧的值lv和rv。如果是,则直接返回m作为峰值元素的下标,如果不是,则需要判断m左侧或右侧的元素是可能成为峰值元素。如果q[m]小于lv,则峰值元素一定在左侧,将右指针r更新为m-1;如果q[m]小于rv,则峰值元素一定在右侧,将左指针l更新为m+1,最后如果循环结束还没有找到峰值元素,则返回左指针l作为峰值元素的下标

var findPeakElement = function (q) {
  const minv = -Infinity;
  const n = q.length;
  let l = 0;
  let r = n - 1;
  while (l < r) {
    const m = l + r >> 1;
    const lv = m > 0 ? q[m - 1] : minv;
    const rv = m + 1 < n ? q[m + 1] : minv;
    if (q[m] > lv && q[m] > rv) return m;
    if (q[m] < lv) r = m - 1;
    else l = m + 1;
  }
  return l;
};


第二种


我们先初始化左右指针,左指针指向数组的第一个元素,右指针指向数组的最后一个元素,然后进入循环,当左指针小于右指针时,去计算中间位置的索引值mid,采用向下取整的方式,如果中间位置的元素大于其相邻元素(即mid位置的元素大于mid+1位置的元素),则峰值元素可能在mid位置的左侧或mid位置本身,将右指针指向mid位置,否则,峰值元素可能在mid位置的右侧,将左指针指向mid位置的右侧,循环结束后,返回右指针的值,即为峰值元素的索引

var findPeakElement = function(nums) {
  let l = 0, r = nums.length - 1, mid;
  while(l < r){
      mid = Math.floor((l + r) / 2);
      if(nums[mid] > nums[mid + 1]){
          r = mid;
      }else{
          l = mid + 1;
      }
  }
  return r
};
相关文章
|
2月前
|
存储 监控 算法
局域网监控其他电脑的设备信息管理 Node.js 跳表算法
跳表通过分层索引实现O(logn)的高效查询、插入与删除,适配局域网监控中设备动态接入、IP映射及范围筛选等需求,相比传统结构更高效稳定,适用于Node.js环境下的实时设备管理。
122 9
|
4月前
|
存储 监控 JavaScript
基于布隆过滤器的 Node.js 算法在局域网电脑桌面监控设备快速校验中的应用研究
本文探讨了布隆过滤器在局域网电脑桌面监控中的应用,分析其高效空间利用率、快速查询性能及动态扩容优势,并设计了基于MAC地址的校验模型,提供Node.js实现代码,适用于设备准入控制与重复数据过滤场景。
207 0
|
2月前
|
存储 监控 JavaScript
企业上网监控系统的恶意 URL 过滤 Node.js 布隆过滤器算法
布隆过滤器以低内存、高效率特性,解决企业上网监控系统对百万级恶意URL实时检测与动态更新的难题,通过概率性判断实现毫秒级过滤,内存占用降低96%,适配大规模场景需求。
244 3
|
2月前
|
存储 监控 算法
电脑管控软件的进程优先级调度:Node.js 红黑树算法
红黑树凭借O(log n)高效插入、删除与查询特性,适配电脑管控软件对进程优先级动态调度的高并发需求。其自平衡机制保障系统稳定,低内存占用满足轻量化部署,显著优于传统数组或链表方案,是实现关键进程资源优先分配的理想选择。
159 1
|
3月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
244 3
|
7月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
195 4
|
7月前
|
监控 算法 JavaScript
公司局域网管理视域下 Node.js 图算法的深度应用研究:拓扑结构建模与流量优化策略探析
本文探讨了图论算法在公司局域网管理中的应用,针对设备互联复杂、流量调度低效及安全监控困难等问题,提出基于图论的解决方案。通过节点与边建模局域网拓扑结构,利用DFS/BFS实现设备快速发现,Dijkstra算法优化流量路径,社区检测算法识别安全风险。结合WorkWin软件实例,展示了算法在设备管理、流量调度与安全监控中的价值,为智能化局域网管理提供了理论与实践指导。
193 3
|
7月前
|
存储 监控 算法
公司内部网络监控中的二叉搜索树算法:基于 Node.js 的实时设备状态管理
在数字化办公生态系统中,公司内部网络监控已成为企业信息安全管理体系的核心构成要素。随着局域网内终端设备数量呈指数级增长,实现设备状态的实时追踪与异常节点的快速定位,已成为亟待解决的关键技术难题。传统线性数据结构在处理动态更新的设备信息时,存在检索效率低下的固有缺陷;而树形数据结构因其天然的分层特性与高效的检索机制,逐渐成为网络监控领域的研究热点。本文以二叉搜索树(Binary Search Tree, BST)作为研究对象,系统探讨其在公司内部网络监控场景中的应用机制,并基于 Node.js 平台构建一套具备实时更新与快速查询功能的设备状态管理算法框架。
276 3
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
232 0
|
2月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
175 2

热门文章

最新文章