【发布时间】:2018-12-22 17:33:39
【问题描述】:
我有一个列表l = [3,1,2,5,3]。我的目标是在 O(n) 时间内找到 repeated 的数字,这里是 3,还有 missing 的数字是 4。最后,输出应该是[3, 4]。
我尝试使用字典查找重复的数字,但再次查找丢失的数字我正在使用另一个循环,这会导致 O(n^2) 时间复杂度。
谁能告诉如何在 O(n) 时间复杂度中找到答案?
【问题讨论】:
-
另一个循环不一定会使其成为 O(n^2),如果两个循环按顺序运行则不会。因此,一个循环遍历
l以收集计数,然后另一个循环遍历从 1 到 5 的范围以确定丢失的数字和重复的数字,这将使两个连续循环相加为 O(2n),即 O (n)。 -
您的算法是否可以访问范围的大小,例如开始和结束编号?
-
没有。每个输入的列表都可以变化。
-
所以在初始循环中,还要确定边界、最小值和最大值,或者分别收集它们(实际上无论如何都会更快)。
-
是的。搞定流程
标签: python algorithm time-complexity