为什么这个答案通过Leetcode Q41

时间:2018-08-19 15:56:09

标签: python algorithm

此处的问题:https://leetcode.com/problems/first-missing-positive/description/

  

您的算法应在O(n)时间内运行,并使用恒定的额外空间。

我有一个非常幼稚的解决方案可以通过,因为这个问题被标记为很难解决,而且大多数人在讨论中的解决方案要复杂得多。

def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if nums == []:
            return 1
        for i in range(1, max(nums)+2):
            if i not in nums:
                return i

查找max使用O(n),因为一旦发现缺失的正数,循环就会停止,即为O(n)。 py3中的range返回一个可迭代的,for语句的每个循环都会动态产生下一个数字。因此时间复杂度应为O(n)

由于仅创建i,所以空间复杂度为O(1)

我想OJ仅检查正确性,而不检查时间/空间复杂度。但是我看不到这个解决方案是错误的。有人可以指出吗?

2 个答案:

答案 0 :(得分:1)

带有嵌套隐式循环for i in range(1, max(nums)+2):的显式循环if i not in nums:不是O(n);)

答案 1 :(得分:1)

彼此之间有两个循环。您有一个从1max(nums)+2的迭代过程,并且在if i not in nums:内迭代了nums。因此您的复杂性将类似于O(n^2)