Программа курса:
Разбор задачи: Единственное число
Предложенный нами код решения:
def single_number(nums):
"""
Находит число, которое встречается в массиве только один раз.
:param nums: Список целых чисел, где все числа встречаются дважды, кроме одного.
:return: Число, которое встречается только один раз.
"""
result = 0
for num in nums:
result ^= num # Применяем XOR ко всем числам
return resultАлгоритм:
- XOR-операция:
- Операция XOR (или исключающее ИЛИ) имеет полезные свойства:
a ^ a = 0— если два одинаковых числа XOR'ятся, результат будет 0.0 ^ a = a— если число XOR'ится с 0, результат остается неизменным.
- Операция XOR (или исключающее ИЛИ) имеет полезные свойства:
- Основная идея:
- Все числа, которые встречаются дважды, при применении XOR "обнуляются", так как они дают 0 при операции XOR.
- Единственное число, которое встречается только один раз, останется в результате, так как оно будет XOR'иться только с 0.
- Пошаговое объяснение:
- Мы начинаем с переменной
result, которая изначально равна 0. - Затем проходим по всем числам в списке
numsи для каждого числа применяем операцию XOR с текущим значением переменнойresult. - Все числа, которые встречаются дважды, обнулятся (поскольку для одинаковых чисел результат XOR равен 0).
- В конце в
resultостанется только одно число, которое встречается только один раз.
- Мы начинаем с переменной
Пояснение к коду:
- Мы начинаем с переменной
result = 0, которая будет хранить итоговый результат. - Для каждого числа из списка
numsмы применяем операцию XOR сresult. В результате всех операций XOR числа, встречающиеся дважды, обнуляются, а одно единственное число, которое встречается только один раз, сохраняется. - В конце возвращаем значение переменной
result, которая будет содержать единственное число, которое встречается только один раз.
Пример:
Для входа nums = [2, 2, 1]:
- Инициализация:
result = 0 result ^= 2→result = 2result ^= 2→result = 0result ^= 1→result = 1
Ответ: 1.
Для входа nums = [4, 1, 2, 1, 2]:
- Инициализация:
result = 0 result ^= 4→result = 4result ^= 1→result = 5result ^= 2→result = 7result ^= 1→result = 6result ^= 2→result = 4
Ответ: 4.
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии