You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现数组n次左旋转的代码问题修正

数组n次左旋转实现

你的现有代码仅实现了单次左旋转的逻辑,没有处理传入的旋转次数参数n,两种可行的实现方式如下:

基于原有逻辑改造

你写的单次左移逻辑本身可以跑通,只需要在外层增加对应次数的循环即可。需要注意:当旋转次数大于数组长度时,旋转一整轮(次数等于数组长度)数组会回到初始状态,所以可以提前对n取模,去掉无效的重复计算。

function rotateLeft(arr, n) {
    // 边界情况直接返回
    if (!arr.length || n === 0) return arr;
    const actualRotateTimes = n % arr.length;
    let result = [...arr];
    for (let i = 0; i < actualRotateTimes; i++) {
        // 单次左旋转:把头部元素移到尾部
        const headItem = result.shift();
        result.push(headItem);
    }
    return result;
}

// 测试:旋转3次
console.log(rotateLeft([1,2,3,4,5], 3)); // 输出 [4,5,1,2,3]

高性能一次性实现

左旋转n次的本质,就是把数组前n个元素整体移动到数组尾部,不需要循环多次遍历,直接通过数组切片就能一次性得到结果,时间复杂度更低:

function rotateLeft(arr, n) {
    if (!arr.length || n === 0) return arr;
    const actualRotateTimes = n % arr.length;
    // 切片拼接:后半段 + 前n个元素
    return arr.slice(actualRotateTimes).concat(arr.slice(0, actualRotateTimes));
}

console.log(rotateLeft([1,2,3,4,5], 3)); // 输出 [4,5,1,2,3]

提示:不要直接修改传入的原数组,否则会产生副作用影响外部其他逻辑,建议操作前先做数组拷贝。

内容的提问来源于stack exchange,提问作者Tanmoy Sarker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:36:10