Разбор задачи: Единственное число

Предложенный нами код решения:

def single_number(nums):
    """
    Находит число, которое встречается в массиве только один раз.

    :param nums: Список целых чисел, где все числа встречаются дважды, кроме одного.
    :return: Число, которое встречается только один раз.
    """
    result = 0
    for num in nums:
        result ^= num  # Применяем XOR ко всем числам
    return result

Алгоритм:

  1. XOR-операция:
    • Операция XOR (или исключающее ИЛИ) имеет полезные свойства:
      • a ^ a = 0 — если два одинаковых числа XOR'ятся, результат будет 0.
      • 0 ^ a = a — если число XOR'ится с 0, результат остается неизменным.
  2. Основная идея:
    • Все числа, которые встречаются дважды, при применении XOR "обнуляются", так как они дают 0 при операции XOR.
    • Единственное число, которое встречается только один раз, останется в результате, так как оно будет XOR'иться только с 0.
  3. Пошаговое объяснение:
    • Мы начинаем с переменной result, которая изначально равна 0.
    • Затем проходим по всем числам в списке nums и для каждого числа применяем операцию XOR с текущим значением переменной result.
    • Все числа, которые встречаются дважды, обнулятся (поскольку для одинаковых чисел результат XOR равен 0).
    • В конце в result останется только одно число, которое встречается только один раз.

Пояснение к коду:

  • Мы начинаем с переменной result = 0, которая будет хранить итоговый результат.
  • Для каждого числа из списка nums мы применяем операцию XOR с result. В результате всех операций XOR числа, встречающиеся дважды, обнуляются, а одно единственное число, которое встречается только один раз, сохраняется.
  • В конце возвращаем значение переменной result, которая будет содержать единственное число, которое встречается только один раз.

Пример:

Для входа nums = [2, 2, 1]:

  1. Инициализация: result = 0
  2. result ^= 2result = 2
  3. result ^= 2result = 0
  4. result ^= 1result = 1

Ответ: 1.

Для входа nums = [4, 1, 2, 1, 2]:

  1. Инициализация: result = 0
  2. result ^= 4result = 4
  3. result ^= 1result = 5
  4. result ^= 2result = 7
  5. result ^= 1result = 6
  6. result ^= 2result = 4

Ответ: 4.

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии