Разбор задачи: Сортировка массива по чётности II

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

 def sortArrayByParityII(nums):
    """
    :type nums: List[int]
    :rtype: List[int]
    """
    even_index = 0  # Указатель для чётных позиций
    odd_index = 1   # Указатель для нечётных позиций
    result = [0] * len(nums)  # Инициализируем массив для результата

    for num in nums:
        if num % 2 == 0:  # Если число чётное
            result[even_index] = num
            even_index += 2
        else:  # Если число нечётное
            result[odd_index] = num
            odd_index += 2

    return result
  1. Инициализация указателей и результата
    Мы создаём два указателя:

    • even_index, который отвечает за чётные индексы (начинается с 0).
    • odd_index, который отвечает за нечётные индексы (начинается с 1).
      Также создаётся массив result, который будет заполняться числами из входного массива. Его длина совпадает с длиной исходного массива, и изначально он заполнен нулями.
    even_index = 0
    odd_index = 1
    result = [0] * len(nums)
    

  1. Проход по массиву nums
    Мы перебираем все числа из массива nums. Для каждого числа:

    • Если число чётное (num % 2 == 0), оно размещается в позиции, на которую указывает even_index. После этого even_index увеличивается на 2, чтобы указывать на следующую чётную позицию.
    • Если число нечётное (num % 2 != 0), оно размещается в позиции, на которую указывает odd_index. После этого odd_index увеличивается на 2, чтобы указывать на следующую нечётную позицию.
    for num in nums:
        if num % 2 == 0:
            result[even_index] = num
            even_index += 2
        else:
            result[odd_index] = num
            odd_index += 2
    

  1. Возврат результата
    После распределения всех чисел массив result содержит числа в требуемом порядке. Его возвращает функция.

    return result
    

Как работает пример

Рассмотрим работу алгоритма на примере:

Входные данные: nums = [4, 2, 5, 7]

  1. Начальные значения:
    • even_index = 0
    • odd_index = 1
    • result = [0, 0, 0, 0]
  2. Проход по массиву:
    • 4: чётное, помещается в result[0], even_index увеличивается до 2.
      Результат: [4, 0, 0, 0]
    • 2: чётное, помещается в result[2], even_index увеличивается до 4.
      Результат: [4, 0, 2, 0]
    • 5: нечётное, помещается в result[1], odd_index увеличивается до 3.
      Результат: [4, 5, 2, 0]
    • 7: нечётное, помещается в result[3], odd_index увеличивается до 5.
      Результат: [4, 5, 2, 7]
  3. Итог: функция возвращает [4, 5, 2, 7].

 



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