这是面试前的提问者。我相信我的答案只是想得到确认,我是对的。
第1部分 - 告诉我这段代码的作用以及它的大O性能 第2部分 - 自己重新编写并告诉我解决方案的大O性能
def foo(a, b):
""" a and b are both lists """
c = []
for i in a:
if is_bar(b, i):
c.append(i)
return unique(c)
def is_bar(a, b):
for i in a:
if i == b:
return True
return False
def unique(arr):
b = {}
for i in arr:
b[i] = 1
return b.keys()
解答: 它从两个列表中包含的元素的并集创建一个集合。它的大O性能是O(n2)
我认为我的解决方案达到了O(n)
Set A = getSetA();
Set B = getSetB();
Set UnionAB = new Set(A);
UnionAB.addAll(B);
for (Object inA : a)
if(B.contains(inA))
UnionAB.remove(inA);
答案 0 :(得分:1)
看起来原始代码正在做一个交集而不是联合。它遍历第一个列表中的所有元素(a)并检查它是否存在于第二个列表(b)中,在这种情况下,它将它添加到列表c中。然后它返回c中的唯一元素。 O(n ^ 2)的表现似乎是正确的。