LeetCode移除有序数组重复项报错:nums未定义原因咨询
问题解决:nums未定义报错及代码修正
报错根源
你的代码存在缩进错误:for循环及后续代码没有缩进在removeDuplicates方法的代码块内,导致这部分代码属于类的顶层逻辑,而非方法内部。而nums是方法的参数,只在方法内部有效,顶层代码根本找不到这个变量,所以会抛出“nums isn't defined”的错误。
原代码的其他问题
除了缩进,代码还不符合题目要求且存在逻辑错误:
- 违反原地修改、O(1)额外内存的要求:额外创建了数组
c - 索引越界:空列表
c直接用c[x]赋值会报错 - 错误赋值
self = len(c):self是类方法的实例对象,不能随意赋值为数字
符合要求的修正代码
采用双指针实现原地去重:
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
代码说明
- 慢指针
slow:标记当前唯一元素的最后存放位置 - 快指针
fast:遍历整个数组寻找新的唯一元素 - 当快指针找到与慢指针不同的元素时,慢指针前移一位,将快指针的元素覆盖过去
- 最终返回
slow + 1,即去重后元素的个数,数组前slow + 1位就是去重后的结果,完全满足题目要求
内容的提问来源于stack exchange,提问作者Shahryar
相关产品推荐
相关产品推荐

