简单的python leetCode在技术上不被接受?

2024-10-17 08:20:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的算法问题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]输出{},而不是{}。假设leetCode没有bug,我只能得出结论,在nums的范围内发生了一些事情?当使用nums = list(set(nums))设置时,nums可能被视为局部变量?在


Tags: 代码self算法列表heredefpy3list
1条回答
网友
1楼 · 发布于 2024-10-17 08:20:25

我现在无法在你链接的网页上测试代码。但我认为您可以将测试用例想象为以下(我只是猜测,所以这个答案可能无法正常工作):

class Solution:
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums = list(set(nums))
        return len(nums)

nums = [1, 1, 2]
solver = Solution()
length = solver.removeDuplicates(nums)
print(nums[:length])

因此,通过观察测试用例,您可以看到实际上得到了[1, 1],因为您没有修改列表,而是在方法范围内创建了一个新的局部变量。你可以试着做这样的事情,也许:

^{pr2}$

当他们要求算法“就位”时,你不应该创建新的变量(或者用新的列表覆盖旧的变量),这不是O(1)额外的内存,而是O(n),因为你在创建一个新的副本。在

编辑更多说明

在你的代码中,你在一个新的内存空间中创建了一个新的局部变量(如果你了解计算机,你就在堆栈中创建它),因此,在你的函数中,你失去了对给你outter nums变量(原始列表)的指针的引用。因此,函数(堆栈)中的nums变量被设置为通过迭代原始列表的所有不同元素而创建的列表。然后,您将得到一个满足所有要求的副本,并存储在堆栈中,但旧列表保持不变。然后,当您退出函数时,堆栈变量将丢失,所以当您访问num变量时,您将得到旧的(原始的)。在

为了理解这里发生了什么,您可以阅读this来了解作用域,阅读{a2}来了解如何将参数传递给函数。在

相关问题 更多 >