所以我知道我的算法在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
答案 0 :(得分:1)
是的,此函数的最差时间以及最佳和平均时间复杂度为 O(n),因为它迭代的次数与函数的大小完全相同。输入列表,无论满足哪些条件,都不会嵌套任何其他迭代。
答案 1 :(得分:1)
是的,的确是O(n)。在最坏的情况下,所有if都将失败,并且每个if块的最后一条语句都将被执行。因此,每个迭代执行6条语句。到那时,您的时间复杂度仍然是O(6n),仍然是O(n)。