Programming languages 从包含在两个列表中的元素的并集设置
这是为面试前提问者准备的。我相信我有答案,只是想确认我是对的 第1部分-告诉我这段代码是做什么的,以及它的big-O性能 第2部分-自己重新编写,并告诉我您的解决方案的big-O性能Programming languages 从包含在两个列表中的元素的并集设置,programming-languages,Programming Languages,这是为面试前提问者准备的。我相信我有答案,只是想确认我是对的 第1部分-告诉我这段代码是做什么的,以及它的big-O性能 第2部分-自己重新编写,并告诉我您的解决方案的big-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) d
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()
答复:
它从包含在两个列表中的元素的并集创建一个集合。It大O性能为O(n2)
我相信我的解决方案达到了O(n)
看起来原始代码是在做一个交集,而不是一个并集。它遍历第一个列表(a)中的所有元素,并检查它是否存在于第二个列表(b)中,在这种情况下,它将它添加到列表c中。然后它从c返回唯一的元素。O(n^2)的性能似乎是正确的。好的,谢谢。所以我的密码答案是工会是错误的,对吗?
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);