是的次数作为输入列表的大小,无论满足哪个条件,都没有嵌套的其他迭代。
所以我知道我的算法在O(n)运行时,因为它只需要一次循环列表,但是我不知道如何计算最坏情况的运行时间。它仍然是线性的,因为无论如何它都在循环吗?
def find_duplicates(lst):
duplist = []
for i in range(0, len(lst)):
if abs(lst[i]) == len(lst):
element = -1
else:
element = lst[abs(lst[i])]
if element > 0:
lst[abs(lst[i])] = -lst[abs(lst[i])]
elif element == 0:
lst[abs(lst[i])] = -len(lst)
else:
if abs(lst[i]) == len(lst):
duplist.append(0)
else:
duplist.append(abs(lst[i]))
return duplist
是的,确实是o(n)。在最坏的情况下,您所有的IF都会失败,并且将执行每个IF块的最后一句话。因此,每个迭代都执行6个语句。然后,您的时间复杂性仍为o(6n),它仍然是o(n)。