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
相关产品推荐
相关产品推荐

