<p>这里的问题:<a href="https://leetcode.com/problems/first-missing-positive/description/" rel="nofollow noreferrer">https://leetcode.com/problems/first-missing-positive/description/</a></p>
<blockquote>
<p>Your algorithm should run in O(n) time and uses constant extra space.</p>
</blockquote>
<p>我有一个非常幼稚的解决方案,因为这个问题被标记为困难,而且大多数人在讨论中的解决方案要复杂得多。你知道吗</p>
<pre><code>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
</code></pre>
<p>find<code>max</code>使用O(n),因为一旦找到丢失的正数,循环就会停止,它就是O(n)。<code>range</code>在py3中返回一个iterable,for语句的每个循环都会动态生成下一个数字。所以时间复杂度应该是O(n)</p>
<p>空间复杂度为O(1),因为只创建了<code>i</code></p>
<p>我想OJ只检查正确性,而不检查空间/时间复杂性。但是我看不出这个解决方案是怎么错的。有人能指出吗?你知道吗</p>
<p>你有两个循环在一起。你有一个从<code>1</code>到<code>max(nums)+2</code>的迭代过程,在这个<code>if i not in nums:</code>内部,它在<code>nums</code>上迭代。因此,您的复杂性将类似于<code>O(n^2)</code>。你知道吗</p>