LeetCode 26题:返回正确计数但nums未被识别修改的问题
问题解决:LeetCode移除重复元素原地修改问题
问题原因
你代码里的nums = array只是在函数内部让局部变量nums指向了新创建的列表,并没有修改LeetCode传入的原列表对象。LeetCode平台检测的是最初传入的那个列表的内容,所以会判定nums未发生变化。
Python中列表是可变对象,但函数参数传递的是对象的引用。当你执行nums = array时,只是把函数内部的nums变量指向了新的列表,原列表的内存地址和内容都没被改动。
解决方案:原地修改原数组
LeetCode要求原地修改原数组的前k个元素,不能重新赋值新数组。推荐使用双指针法实现:
class Solution(object): def removeDuplicates(self, nums): 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] # 将不重复元素放到慢指针位置 return slow + 1 # 慢指针从0开始,所以元素个数是slow+1
代码逻辑说明
- 慢指针
slow初始指向第一个元素,快指针fast从第二个元素开始遍历。 - 当快指针找到和慢指针位置不同的元素时,说明遇到了新的不重复元素:将慢指针后移一位,把快指针的元素赋值到慢指针的位置。
- 遍历结束后,
slow + 1就是去重后的元素个数,原数组的前slow + 1个元素已经是去重后的结果,符合题目要求。
内容的提问来源于stack exchange,提问作者Colbzyk
相关产品推荐
相关产品推荐

