LeetCode 26题:移除有序数组重复元素代码本地正确但平台不通过求助
LeetCode 26题「Remove Duplicates from Sorted Array」提交失败原因及解决方法
你的代码本地运行正确但LeetCode提交不通过,核心问题是没有遵守题目要求的「原地修改」规则。
问题出在哪?
在Python中,nums = new_nums这行代码只是把函数内部的局部变量nums指向了你新建的new_nums列表,但LeetCode的判题系统会检查最初传入的原数组的内存内容,而不是你重新赋值后的局部变量。你的代码没有对原数组做任何实际修改,所以判题器会认为你没完成任务。
正确的原地修改解法(双指针法)
因为数组是非递减排序的,我们可以用双指针在原数组上直接操作,不需要额外创建新数组:
class Solution: def removeDuplicates(self, nums: List[int]) -> int: if not nums: return 0 # 慢指针指向当前唯一元素的最后位置 slow = 0 for fast in range(1, len(nums)): # 当快指针找到不同元素时,更新慢指针并赋值 if nums[fast] != nums[slow]: slow += 1 nums[slow] = nums[fast] # 唯一元素的数量是慢指针索引+1 return slow + 1
为什么这个解法能通过?
- 直接在原数组的内存空间上修改元素,没有创建新数组,完全符合「原地操作」要求。
- 利用数组有序的特性,双指针遍历的时间复杂度是O(n),空间复杂度是O(1),满足题目隐含的效率要求。
补充说明
你本地运行时看起来正确,是因为你可能直接打印了函数内重新赋值后的nums变量,但LeetCode的判题逻辑是从外部传入原数组,然后检查该数组的前k个元素是否符合要求——你的代码根本没碰原数组,自然会失败。
内容的提问来源于stack exchange,提问作者Carina
相关产品推荐
相关产品推荐

