Programming languages 从包含在两个列表中的元素的并集设置

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

这是为面试前提问者准备的。我相信我有答案,只是想确认我是对的

第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)

  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);