返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript算法题之如何将一个数组旋转k步
  • 920
分享到

JavaScript算法题之如何将一个数组旋转k步

2024-04-02 19:04:59 920人浏览 安东尼
摘要

目录一、题目描述:二、思路分析:两种思路:思路1:把末尾的元素挨个pop,然后unshift到数组后面TS代码运行结果思路2:把数组拆分,最后concat拼接到一起TS代码运行结果三

一、题目描述:

将一个数组旋转k步

  • 输入一个数组[1,2,3,4,5,6,7,8]
  • 当k=3时,即旋转3步
  • 输出[6,7,8,1,2,3,4,5]

二、思路分析:

两种思路:

  • 把末尾的元素挨个pop,然后unshift到数组后面
  • 把数组拆分,最后concat拼接到一起

思路1:把末尾的元素挨个pop,然后unshift到数组后面

删除数组的最后一个元素:

var fruits = ["Banana", "Orange", "Apple", "ManGo"];
fruits.pop();
  • JavaScript Array unshift() 方法

将新项目添加到数组的开头:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon","Pineapple");

TS代码

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)

运行结果

思路2:把数组拆分,最后concat拼接到一起

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"]

TS代码


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')

四、划重点

  • 注意算法时间复杂度(前端重时间,轻空间)
  • 识破内置api的时间复杂度(如unshift为0(n))
  • 单元测试,考虑参数非法情况,提升代码健壮性

到此这篇关于JavaScript算法题之如何将一个数组旋转k步的文章就介绍到这了,更多相关JavaScript数组旋转k步内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript算法题之如何将一个数组旋转k步

本文链接: https://lsjlt.com/news/142086.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript算法题之如何将一个数组旋转k步
    目录一、题目描述:二、思路分析:两种思路:思路1:把末尾的元素挨个pop,然后unshift到数组后面TS代码运行结果思路2:把数组拆分,最后concat拼接到一起TS代码运行结果三...
    99+
    2024-04-02
  • JavaScript如何将arguments对象转换成一个数组
    这篇文章将为大家详细讲解有关JavaScript如何将arguments对象转换成一个数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。将arguments对象转换成一个...
    99+
    2024-04-02
  • javascript中如何将一维数组转为三维数组
    这篇文章主要为大家展示了“javascript中如何将一维数组转为三维数组”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript中如何将一维数组转为...
    99+
    2024-04-02
  • 如何将多个php数组转成一个json数据
    本篇内容主要讲解“如何将多个php数组转成一个json数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何将多个php数组转成一个json数据”吧!转换方法:1、使用“array_merge_...
    99+
    2023-06-30
  • PHP中如何将一个对象转换为一个数组
    在PHP中,将一个对象转换为数组是一个经常性的操作,因为数组是一个更方便地存储和处理数据的数据结构。本文将介绍PHP中如何将一个对象转换为一个数组。PHP中将一个对象转换为数组的方法非常简单,可以通过将对象强制转换为数组来实现。可以使用(a...
    99+
    2023-05-14
  • php如何将多个字符串转为一个数组
    这篇文章主要介绍“php如何将多个字符串转为一个数组”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php如何将多个字符串转为一个数组”文章能帮助大家解决问题。将多个字符串转为一个数组的步骤:1、利用...
    99+
    2023-07-02
  • php中如何将二维数组转为多个一维数组
    这篇文章主要介绍php中如何将二维数组转为多个一维数组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php将二维数组转多个一维数组的方法:1、使用array_reduce()函数来转换;2、使用array_walk_...
    99+
    2023-06-15
  • JavaScript中如何使用扩展运算符将类数组转化为数组
    这篇文章主要介绍了JavaScript中如何使用扩展运算符将类数组转化为数组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。扩展运算符[......
    99+
    2024-04-02
  • JavaScript中如何使用Array.prototype.slice.call()方法将类数组转化为数组
    这篇文章主要介绍了JavaScript中如何使用Array.prototype.slice.call()方法将类数组转化为数组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,...
    99+
    2024-04-02
  • JavaScript中如何使用Array.from方法将类数组转化为数组
    这篇文章主要介绍JavaScript中如何使用Array.from方法将类数组转化为数组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Array.fromArray.from(doc...
    99+
    2024-04-02
  • PHP如何将一个一维数组的值转化为字符串
    这篇文章将为大家详细讲解有关PHP如何将一个一维数组的值转化为字符串,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。将一维数组的值转换为字符串 简介 在 PHP 中,一维数组是一种存储在连续内存位置上的数据...
    99+
    2024-04-02
  • JavaScript常见数组方法之如何转置矩阵
    目录一、常见二维数组操作创建与遍历【案例】二维数组转置二、常见数组方法栈和队列方法检索方法数组转字符串其他方法总结今天这篇文章就是来和大家详细聊聊JavaScript常见数组方法,不...
    99+
    2024-04-02
  • 贪心算法之如何实现K次取反后最大化的数组和
    本篇内容主要讲解“贪心算法之如何实现K次取反后最大化的数组和”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“贪心算法之如何实现K次取反后最大化的数组和”吧!很多录...
    99+
    2024-04-02
  • 如何将一个DIV旋转的某一角度即90度/180度/270度及放大等问题
    本篇文章为大家展示了如何将一个DIV旋转的某一角度即90度/180度/270度及放大等问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。对前端是小白,不过有个gis...
    99+
    2024-04-02
  • php如何写一个二维数组排序算法函数
    这篇文章给大家分享的是有关php如何写一个二维数组排序算法函数的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数(a...
    99+
    2024-04-02
  • php如何将一维数组转为字符串?方法浅析
    用implode函数转化成字符串PHP中经常需要将数组中的各个值组合成一个字符串输出,这时候可以使用implode函数来完成。implode函数可以将一个一维数组的值转化成一个字符串,各个值之间用指定的分隔符隔开。一下是implode函数的...
    99+
    2023-05-14
  • java如何写一个方法将数组中的每个元素都*2
    这篇文章主要为大家展示了“java如何写一个方法将数组中的每个元素都*2 ”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java如何写一个方法将数组中的每个元素都*2 ”这篇文章吧。写一个方法,...
    99+
    2023-06-27
  • LeetCode算法题:如何利用异步编程优化数组操作?
    在处理大型数据集时,数组操作是一种非常常见的操作。但是,当数据集非常大时,数组操作可能会变得非常缓慢。为了处理这种情况,我们可以使用异步编程来优化数组操作。 本文将介绍如何使用异步编程来优化数组操作,并给出一个LeetCode算法题的实际...
    99+
    2023-11-12
    数组 异步编程 leetcode
  • JavaScript如何使用map()方法来遍历一个数组里的项
    这篇文章主要介绍JavaScript如何使用map()方法来遍历一个数组里的项,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用 map() 方法来遍历一个数组里的项var ...
    99+
    2024-04-02
  • JavaScript如何在0和设定的最大值之间生成一个数字数组
    小编给大家分享一下JavaScript如何在0和设定的最大值之间生成一个数字数组,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作