从两个列表中包含的元素的联合设置

时间:2011-07-21 16:14:26

标签: programming-languages

这是面试前的提问者。我相信我的答案只是想得到确认,我是对的。

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

1 个答案:

答案 0 :(得分:1)

看起来原始代码正在做一个交集而不是联合。它遍历第一个列表中的所有元素(a)并检查它是否存在于第二个列表(b)中,在这种情况下,它将它添加到列表c中。然后它返回c中的唯一元素。 O(n ^ 2)的表现似乎是正确的。