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

LeetCode数组合并题concat拼接后无法得到完整数组问题排查

LeetCode合并有序数组JS代码运行不一致问题

问题现象

刷LeetCode合并两个有序数组题目时遇到异常:同一段JavaScript实现代码,在JS Fiddle、Programiz等第三方在线编译器运行时,可得到完整的数组合并结果;但在LeetCode编译环境中提交运行时,仅返回第一个数组的内容,无法得到完整拼接后的正确结果。

佐证材料

  • LeetCode提交运行截图:执行后仅返回部分数组,未生成完整合并结果
  • 第三方在线编译器运行截图:执行后可正常输出完整合并后的数组

问题复现代码

var merge = function(nums1, m, nums2, n) {
    let x = nums1.length;
    if(x !== m){
        for(let i = x; i > m; i--){
            nums1.pop(nums1[i]);
        }
    }
    return nums1.concat(nums2).sort((a,b)=> a -b);
};
// 自行测试时打印返回值可得到[1,2,2,3,5,6]的正确结果
console.log(merge([1,2,3,0,0,0],3,[2,5,6],3));

根因分析

问题和编译器环境差异无关,本质是对题目判题规则、JavaScript数组API特性不熟悉导致:

  1. 题目判题规则要求原地修改:这道题不需要函数返回合并后的新数组,LeetCode判题逻辑会在函数执行结束后,直接读取最初传入的nums1引用指向的数组内容做结果校验,完全不会读取函数return的值。
  2. concatAPI不会修改原数组:Array.concat()是不会产生副作用的纯方法,调用后不会改动原数组,只会生成并返回一个全新的拼接后的数组。你在第三方平台测试时,手动打印的是函数返回的这个新数组,所以看起来结果正确;但原始传入的nums1经过前面的pop操作后,仅保留了前m个元素,根本没有写入nums2的内容,LeetCode校验原数组时自然只能拿到第一个数组的内容。
  3. 额外提示:Array.pop()方法本身不需要传入参数,你代码中pop内传入的nums1[i]是无效参数,虽然不影响当前逻辑,但属于冗余写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:21:13