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

Leetcode旋转数组代码在Codepen与平台运行结果不一致求因

问题原因及解决方法

核心问题在于Leetcode的这道旋转数组题要求原地修改输入的nums数组,而非返回一个新数组。你的代码在Codepen里能得到正确结果,是因为你直接打印了函数返回的新数组c,但Leetcode会检查传入的原nums数组的变化——你的代码里两次splice操作已经把原数组的元素全移走了,导致原nums变成空数组,所以Leetcode返回空。

拆解你的代码操作:

  1. 第一次splice(0, nums.length - k)会把原数组前nums.length -k个元素移除,此时原nums里只剩下后k个元素(比如示例里就是[5,6,7])
  2. 第二次splice(-k)又把这剩下的k个元素全部移除,原nums直接变成空数组
  3. 最后你返回的新数组c,Leetcode根本不读取这个返回值,它只关心传入的原nums数组的最终状态

正确的原地修改写法

可以直接把移除的部分拼到原数组末尾,无需返回新数组:

var rotate = function(nums, k) {
    // 处理k大于数组长度的情况,避免无效操作
    k = k % nums.length;
    // 移除前nums.length -k个元素,拼到数组末尾
    nums.push(...nums.splice(0, nums.length - k));
};

操作后原nums数组会被直接修改为目标结果,完全符合Leetcode的判题要求。

另外也可以用三次反转的方法,空间复杂度更低:

var rotate = function(nums, k) {
    k = k % nums.length;
    // 反转整个数组
    reverse(nums, 0, nums.length - 1);
    // 反转前k个元素
    reverse(nums, 0, k - 1);
    // 反转剩下的元素
    reverse(nums, k, nums.length - 1);
};

function reverse(arr, start, end) {
    while (start < end) {
        [arr[start], arr[end]] = [arr[end], arr[start]];
        start++;
        end--;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:55:14