JS将一个数组旋转k步的思路及操作是什么
Admin 2022-11-15 群英技术资讯 1090 次浏览
这篇文章我们来了解“JS将一个数组旋转k步的思路及操作是什么”的内容,小编通过实际的案例向大家展示了操作过程,简单易懂,有需要的朋友可以参考了解看看,那么接下来就跟随小编的思路来往下学习吧,希望对大家学习或工作能有帮助。
将一个数组旋转k步
删除数组的最后一个元素:
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.pop();
将新项目添加到数组的开头:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon","Pineapple");
function rotate1(arr:number[],k:number):number[]{
const length = arr.length
if(!k||length===0)return arr
const step = Math.abs(k%length)
for(let i =0;i<step;i++){
const n = arr.pop()
if(n){
arr.unshift(n)
}
}
return arr
}
const arr = [1,2,3,4,5,6,7,8]
const arr1 = rotate1(arr,3)
console.log(arr1)

JavaScript Array slice() 方法
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"]; var citrus = fruits.slice(1, 3);
JavaScript 数组 Const
const array1 = ['a', 'b', 'c']; const array2 = ['d', 'e', 'f']; const array3 = array1.concat(array2); console.log(array3); // expected output: Array ["a", "b", "c", "d", "e", "f"]
/**
* 旋转数组K步 -使用concat
* @param arr arr
* @param k k
* @returns arr
*/
function rotate2(arr:number[],k:number):number[]{
const length = arr.length
if(!k || length===0) return arr
const step = Math.abs(k%length)
const part1 = arr.splice(-step)
const part2 = arr.splice(0,length-step)
arr = arr.concat(part1,part2)
return arr
}
const arr2 = [1,2,3,4,5,6,7,8]
const arr3 = rotate2(arr2,3)
console.log(arr3)

分析代码,整理思路,尽量找出最优解,编写代码不仅要书写功能测试,而且要养成编写单元测试的习惯,保证程序的健壮性
复杂度分析:
- 思路1的时间复杂度为O(n^2),空间复杂度为O(1)
- 思路2的时间复杂度为O(1),空间复杂度为O(n)
前端重时间轻空间,思路2更佳
时间复杂度O(1)和O(n)差别很大
5. 数组是一个有序结构,数组的unshift、shirt、splice操作都很慢,pop和push都很快,.slice不会改变原数组,时间复杂度为0(1)
//性能测试
const arr4 = []
for(let i =0;i<10 * 10000;i++){
arr4.push(i)
}
console.time('rotate1')
rotate1(arr4,9*10000)
console.timeEnd('rotate1')
const arr5 = []
for(let i=0;i< 10 * 10000;i++){
arr5.push(i)
}
console.time('rotate2')
rotate2(arr5,9*10000)
console.timeEnd('rotate2')

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
变量对象是与执行上下文相关的数据作用域。它是一个与上下文相关的特殊对象,它存储了上下文中定义的变量和函数声明。变量对象是一个抽象概念。不同的上下文类型在物理上使用不同的对象。
这篇文章主要为大家介绍了JS对象创建与继承的汇总梳理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
目录文件如 httpFile.js如下:consthttpd=require("http");constfs=require("fs");//创建服务httpd.createServer((req,res)=>{//读取www文件夹下的路径fs.readFile(`www${req.url}`,(err,data)=>{
原生Ajax与JQuery Ajax,有不少朋友对此感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
这篇文章我们来了解React组件通信的内容,本文会介绍组件通信是什么,如何通信,及示例等等,对大家学习和理解React组件通信有一定的帮助,感兴趣的朋友可以参考。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008