это для допроса перед интервью. я думаю, что у меня есть ответ, просто хотел получить подтверждение, что я прав.
Часть 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()
ОТВЕТЫ:
Он создает набор из объединения элементов, содержащихся в двух списках. Это большая 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);