我有一个非常简单的算法问题here,它要求从列表中删除重复项并返回新列表的长度。在
以下是我在py3
中的代码:
class Solution:
def removeDuplicates(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums = list(set(nums))
return len(nums)
当我在我的终端上测试它时,它工作得很好。但是根据leetCode,input:[1,1,2]
输出{nums
的范围内发生了一些事情?当使用nums = list(set(nums))
设置时,nums
可能被视为局部变量?在
我现在无法在你链接的网页上测试代码。但我认为您可以将测试用例想象为以下(我只是猜测,所以这个答案可能无法正常工作):
因此,通过观察测试用例,您可以看到实际上得到了
^{pr2}$[1, 1]
,因为您没有修改列表,而是在方法范围内创建了一个新的局部变量。你可以试着做这样的事情,也许:当他们要求算法“就位”时,你不应该创建新的变量(或者用新的列表覆盖旧的变量),这不是O(1)额外的内存,而是O(n),因为你在创建一个新的副本。在
编辑更多说明
在你的代码中,你在一个新的内存空间中创建了一个新的局部变量(如果你了解计算机,你就在堆栈中创建它),因此,在你的函数中,你失去了对给你outter nums变量(原始列表)的指针的引用。因此,函数(堆栈)中的nums变量被设置为通过迭代原始列表的所有不同元素而创建的列表。然后,您将得到一个满足所有要求的副本,并存储在堆栈中,但旧列表保持不变。然后,当您退出函数时,堆栈变量将丢失,所以当您访问
num
变量时,您将得到旧的(原始的)。在为了理解这里发生了什么,您可以阅读this来了解作用域,阅读{a2}来了解如何将参数传递给函数。在
相关问题 更多 >
编程相关推荐