Skip to content

Instantly share code, notes, and snippets.

@yobayob
Created September 13, 2020 18:54
Show Gist options
  • Save yobayob/e6b6667b766c3448a4e76807db70785e to your computer and use it in GitHub Desktop.
Save yobayob/e6b6667b766c3448a4e76807db70785e to your computer and use it in GitHub Desktop.
Для ЯП
def remove_zero(l: list) -> list:
"""
Дан массив целых чисел. Нужно удалить из него нули. Можно использовать только О(1) дополнительной памяти
Скорость работы - линейно, доп память не используется
"""
n: int = 0
for i in range(len(l)):
if l[i] != 0:
l[n], l[i] = l[i], l[n]
n += 1
del l[n:]
return l
if __name__ == "__main__":
assert remove_zero([0,0,1]) == [1]
assert remove_zero([1,0,1]) == [1,1]
assert remove_zero([0,1,1]) == [1,1]
assert remove_zero([1,0,0]) == [1]
assert remove_zero([0,0,0]) == []
assert remove_zero([]) == []
def symmetric_difference(a: list, b: list) -> list:
"""
Даны два списка, нужно вернуть элементы, которые есть в 1-ом списке, но нет во 2-ом. Оценить эффективность своего решения
Я решил воспользоваться стандартными множествами в питоне, так как эта функционал реализован в методе `symmetric_difference`
Из недостатков этого решения, хотелось бы отметить, что множества в питоне имеют случайный порядок элементов
Скорость работы и использование памяти - линейно
Если, решать без множеств, то я бы:
1. Cоздал бы два словаря, типа `d1 = {k: True for k in a}` для каждого списка
2. Вернул бы разницу между этими словарями таким способом `[n for d1 in n if not d2.get(n)]`
"""
return list(set(a).symmetric_difference(set(b)))
if __name__ == "__main__":
assert symmetric_difference([0, 0, 0, 1, 2, 0], [1]) == [0, 2]
assert symmetric_difference([1, 2, 3, 4], [1, 2, 3, 4]) == []
assert symmetric_difference([0, 0, 0, 1], [0, 0, 1, 0]) == []
assert symmetric_difference([], [0, 0, 1, 0]) == [0, 1]
assert symmetric_difference([0, 0, 1, 0], []) == [0, 1]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment