Ctrl K

Метки вразнобой

Средняя
На складской ленте стоят коробки, на каждой наклеена числовая метка: labels[i] — метка i-й коробки. Оператору нужно переставить коробки так, чтобы никакие две соседние не имели одинаковой метки. Гарантируется, что это возможно. Перестановок обычно много, поэтому постройте вот эту: 1. Выстройте коробки в очередь: сначала все коробки самой частой метки, затем следующей по частоте и так далее. Если метки встречаются одинаково часто, раньше идёт меньшая. 2. Раздавайте коробки из очереди по позициям 0, 2, 4, …, а когда чётные позиции закончатся — по позициям 1, 3, 5, …. Верните получившийся ряд меток. Подумайте, почему в нём не окажется двух одинаковых соседей.
Пример 1
labels=[7, 3, 7, 3, 7] → [7, 3, 7, 3, 7]

Метка 7 встречается три раза, 3 — дважды. Порядок раскладки: 7, 7, 7, 3, 3. Позиции 0, 2, 4 получают 7, позиции 1 и 3 — 3.

Пример 2
labels=[5, 2, 9, 2, 5, 9] → [2, 5, 2, 9, 5, 9]

Все метки встречаются по два раза, поэтому порядок по значению: 2, 2, 5, 5, 9, 9. Чётные позиции получают 2, 2, 5, нечётные — 5, 9, 9.

Пример 3
labels=[4] → [4]
Ограничения
  • 1 ≤ len(labels) ≤ 10⁴
  • 1 ≤ labels[i] ≤ 10⁴
  • Ни одна метка не встречается больше ⌈len(labels) / 2⌉ раз
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЗадания с перерывом на остывание СредняяСамые частые значения СредняяСамые частые запросы СредняяБез одинаковых соседей СредняяВыбор с лимитом по тегам Средняя
загружаем Python…
Вход
labels=[7, 3, 7, 3, 7]
Ожидается
[7, 3, 7, 3, 7]

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