JS算法-轮转数组

简介: JS算法-轮转数组

题目


给定一个整数数组 nums,将数组中的元素向右轮转 k **个位置,其中 k **是非负数。

输入:nums = [-1,-100,3,99], k = 2
输出:[3,99,-1,-100]
解释: 
向右轮转 1 步: [99,-1,-100,3]
向右轮转 2 步: [3,99,-1,-100]


题解


第一种


首先将数组nums反转,即原来的最后一个元素变成了第一个元素,原来的第一个元素变成了最后一个元素,依次类推,然后对k取模,这一步是为了防止k的值大于数组长度,因为大于数组长度的移动是多余的,所以只需移动k%nums.length个元素即可,然后将数组nums分为两部分,前k个元素和后面的元素。对前k个元素进行反转,即原来的第一个元素变成了第k个元素,原来的第二个元素变成了第k-1个元素,依次类推,最后对后面的元素进行反转,即原来的第k+1个元素变成了倒数第二个元素,原来的第k+2个元素变成了倒数第三个元素,依次类推,返回最终的数组nums

var rotate = function(nums, k) {
  nums.reverse();
  k %= nums.length; 
  let left = 0;
  let right = k-1;
  while(left<right) {
      [nums[left++], nums[right--]] = [nums[right],nums[left]];
  }
  left = k;
  right = nums.length-1;
  while(left<right) {
      [nums[left++], nums[right--]] = [nums[right],nums[left]];
  }
  return nums;
};


第二种


定义了一个 reverse 函数,用来反转数组中指定部分的元素。具体实现就是利用双指针,将指定部分的元素逆序交换,然后在rotate 函数中先将 k 取余数组长度,避免 k 的值大于数组长度的情况。然后调用三次 reverse 函数,分别是将整个数组逆序、将前 k 个元素逆序、将后面剩余的元素逆序。这样就可以实现将数组向右旋转 k 步的功能

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