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

合并有序数组代码在PyCharm与LeetCode运行结果不一致排查

合并有序数组:本地运行与LeetCode提交结果不一致的原因及解决方法

问题核心原因

LeetCode题目明确要求原地修改nums1,但你提交的代码存在关键错误:

nums1 = nums1[0:m] + nums2[0:n]

这行代码并没有修改传入的原nums1数组,而是创建了一个新列表,并让函数内部的局部变量nums1指向这个新对象。LeetCode最终检查的是最初传入的原数组,所以原数组内容还是初始的[1,2,3,0,0,0],自然与预期结果不符。

而本地代码中nums1是全局变量,重新赋值后指向新列表,后续排序操作针对新列表执行,因此能得到正确结果。

正确的原地修改解法

方法1:填充空位后排序(简单直观)

直接将nums2的元素放到nums1的末尾空位,再对原数组排序:

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        nums1[m:] = nums2
        nums1.sort()

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

无需额外空间,从两个数组的有效元素末尾开始比较,将较大的元素放到nums1的最后位置:

class Solution:
    def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
        i, j, k = m - 1, n - 1, m + n - 1
        
        while i >= 0 and j >= 0:
            if nums1[i] > nums2[j]:
                nums1[k] = nums1[i]
                i -= 1
            else:
                nums1[k] = nums2[j]
                j -= 1
            k -= 1
        
        # 处理nums2剩余的未比较元素
        while j >= 0:
            nums1[k] = nums2[j]
            j -= 1
            k -= 1

内容的提问来源于stack exchange,提问作者D.Zou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:07:14