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

LeetCode合并有序数组:Python代码本地正常却无法通过测试

问题分析与解决

代码问题根源

你写的nums1 = sorted(nums1[0:m] + nums2[0:n])只是在函数内部给局部变量nums1重新赋值了一个新的排序后列表,完全没修改传入的原nums1列表。LeetCode判题系统会检查你是否原地修改了最初传入的nums1,你的代码没对原列表做任何改动,自然无法通过测试。

修复方案

方案1:切片赋值原地修改(简单直观)

用切片赋值覆盖nums1的全部元素,直接修改原列表内容:

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        nums1[:] = sorted(nums1[:m] + nums2[:n])

方案2:双指针法(时间复杂度O(m+n),更高效)

利用两个数组非降序的特性,从后往前填充nums1的末尾空间,避免频繁移动元素:

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        # 三个指针:分别指向nums1有效元素末尾、nums2末尾、nums1整体末尾
        p1 = m - 1
        p2 = n - 1
        p = m + n - 1
        
        while p1 >= 0 and p2 >= 0:
            if nums1[p1] > nums2[p2]:
                nums1[p] = nums1[p1]
                p1 -= 1
            else:
                nums1[p] = nums2[p2]
                p2 -= 1
            p -= 1
        
        # 若nums2还有剩余元素,直接填充到nums1前面
        nums1[:p2+1] = nums2[:p2+1]

如何查看LeetCode测试用例

提交代码后如果测试不通过,页面会展示失败的测试用例详情:

  • 点击提交结果里的"错误"条目,展开后能看到具体的输入参数(比如nums1、m、nums2、n的实际值)、你的代码输出和预期输出。
  • 也可以在提交页面的"测试用例"模块手动输入自定义测试用例,运行后查看结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:12:09