Ctrl K

Чётность на своих местах

Лёгкая
Дан массив values чётной длины, ровно половина чисел в нём чётные. Нужно расставить числа так, чтобы на чётных позициях (0, 2, 4, …) стояли чётные числа, а на нечётных — нечётные. Делать это нужно по такому правилу. Идём по чётным позициям слева направо. Если на очередной чётной позиции стоит нечётное число, меняем его местами с числом на самой левой нечётной позиции, где сейчас стоит чётное число. Верните массив после всех обменов. Попробуйте обойтись без дополнительного массива и за один проход.
Пример 1
values=[5, 8, 3, 2, 6, 7] → [8, 5, 2, 3, 6, 7]

На чётной позиции 0 стоит нечётное 5 — меняем его с ближайшим «чужим» на нечётной позиции, это 8 на позиции 1: [8, 5, 3, 2, 6, 7]. На позиции 2 стоит 3 — следующий «чужой» на нечётной позиции это 2 на позиции 3: [8, 5, 2, 3, 6, 7]. На позиции 4 всё в порядке.

Пример 2
values=[1, 4] → [4, 1]

Единственный обмен: [4, 1].

Ограничения
  • 2 ≤ len(values) ≤ 2 · 10⁵
  • len(values) чётная
  • ровно половина чисел чётные
  • 0 ≤ values[i] ≤ 1000
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСлияние в запасной хвост ЛёгкаяЗначения в обоих списках ЛёгкаяОбщие значения с повторами ЛёгкаяКуски торта для гостей ЛёгкаяЧётные налево Лёгкая
загружаем Python…
Вход
values=[5, 8, 3, 2, 6, 7]
Ожидается
[8, 5, 2, 3, 6, 7]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 76 тестов на сервере, включая скрытые.