Я пытаюсь решить вопрос следующий вопрос, взятый из leetcode (https://leetcode.com/problems/first-missing-positive/)Нахождение сложность моего кода
Учитывая несортированный массив целых чисел, найти первый недостающий целое положительное число.
Например, Учитывая [1,2,0] Возвращение 3, и [3,4, -1,1] возврата 2.
Ваш алгоритм должен работать в O (N) времени и использования постоянное пространство.
class Solution(object):
def firstMissingPositive(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(len(nums)):
while nums[i] != i+1:
if nums[i]<=0 or nums[i]>len(nums) or nums[i]==nums[nums[i]-1]:
break
else:
temp=nums[nums[i]-1]
nums[nums[i]-1]=nums[i]
nums[i]=temp
for i in range(len(nums)):
if nums[i]!=i+1:
return i+1
return len(nums)+1
b=Solution()
print b.firstMissingPositive([1,1])
Уверен, что это решение имеет сложность O (n^2). Но все же многие онлайн-решения использовали тот же алгоритм.
Может кто-нибудь объяснить, как этот код O (N) сложность
Это, кажется, O (N^2), вы уверены, что это тот же самый алгоритм? – Untitled123
Трудно сказать, что такое сложность этого кода, потому что цикл while не имеет определенного количества итераций. Возможно, что он имеет O (1) амортизированное время, и в этом случае весь код равен O (N). Я не говорю, что это обязательно так; просто чтобы вы не могли отказаться от возможности в одиночку. – Kevin
Да, вы правы @ Кевин. Но в худшем случае моя сложность - O (n^2) для случая [4,1,2,3] –