【发布时间】:2015-10-10 00:52:59
【问题描述】:
所以我的代码如下所示。输入是一个列表,其中只有一个重复项和一个缺失项。答案是一个包含两个长元素的列表,第一个是列表中的重复元素,第二个是列表中从 1 到 n 范围内的缺失元素。 示例 =[1,4,2,5,1] 答案=[1,3] 下面的代码有效。
我错了,复杂性是 O(n),有没有更快的方法在 Python 中实现这一点? 另外,有什么方法可以在不使用额外空间的情况下做到这一点。
注意:元素的数量级可能为 10^5 或更大
n = max(A)
answer = []
seen = set()
for i in A:
if i in seen:
answer.append(i)
else:
seen.add(i)
for i in xrange(1,n):
if i not in A:
answer.append(i)
print ans
【问题讨论】:
-
这更适合代码审查。
-
优化后的代码可能和他贴的完全不一样,所以……
-
顺便说一句,你没看错:你的代码是 O(n)。它的问题是,正如你所注意到的,它也需要 O(n) 空间复杂度
-
这个问题可能适合Code Review,只要 (a) 您的代码按预期工作,(b) 您的代码是真实代码,而不是示例代码,并且 (c) 您的代码包含在问题的正文中。如果您希望通过同行评审来改进代码的各个方面,请将其发布在 Code Review 上。
-
(@TigerhawkT3:不,那些人是敏感的。)假设你可以做得更快:你会有很多元素没有检查。假设您有两个,并尝试证明没有这些您可能无法找到答案。
标签: python algorithm performance list