Created
September 13, 2020 18:54
-
-
Save yobayob/e6b6667b766c3448a4e76807db70785e to your computer and use it in GitHub Desktop.
Для ЯП
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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([]) == [] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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