LeetCode合并两个有序数组问题:本地正常运行但平台报错求助
合并两个有序数组问题排查与解决
问题核心
LeetCode这道题要求原地修改nums1数组,而非返回新数组。你的代码创建了新数组arr并返回,但平台会直接检查传入的nums1的修改结果,这是导致提交失败的根本原因。
正确的原地实现思路
利用nums1末尾预留的空位(总长度为m+n),从两个数组的有效元素末尾开始反向比较:
- 每次取较大的元素放到nums1的当前末尾位置
- 无需额外开辟数组空间,也不会覆盖未处理的元素
修改后的可通过代码
class Solution: def merge(self, nums1, m, nums2, n): # 指针分别指向nums1有效元素末尾、nums2末尾、nums1实际末尾(含空位) p1, p2, p = m - 1, n - 1, 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数组的修改结果,会忽略函数的返回值
- 最后一步处理nums2剩余元素的逻辑:当nums1的有效元素已全部处理完,nums2剩下的元素都比nums1的所有元素小,直接覆盖nums1的前p2+1个位置即可
内容的提问来源于stack exchange,提问作者Vishav Singla
相关产品推荐
相关产品推荐

