Ctrl K

Обмены близких чисел

Средняя
Дан массив положительных чисел values и число gap. За один ход можно поменять местами любые два элемента, если они отличаются не больше чем на gap. Ходов можно делать сколько угодно. Верните лексикографически наименьший массив, который можно так получить. Массив a меньше массива b, если в первой позиции, где они различаются, у a стоит меньшее число.
Пример 1
values=[6, 2, 9, 4, 20, 7], gap=2 → [2, 4, 6, 7, 20, 9]

Числа 2, 4, 6, 7, 9 связаны цепочкой с шагом не больше 2, их можно расставить как угодно по их местам (индексы 0, 1, 2, 3, 5). А 20 далеко от всех и остаётся на месте.

Пример 2
values=[15, 3, 11, 1], gap=3 → [15, 1, 11, 3]

Меняться могут 3 и 1 (разница 2), а 15 и 11 нет (разница 4). Меньше, чем [15, 1, 11, 3], не получить.

Пример 3
values=[5, 5, 1], gap=0 → [5, 5, 1]

Можно менять только равные числа, а это ничего не меняет.

Ограничения
  • 1 ≤ len(values) ≤ 10⁵
  • 1 ≤ values[i] ≤ 10⁹
  • 0 ≤ gap ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСклеить карточки контактов СредняяКогда все перезнакомились СредняяПерестановки по связям СредняяУровни клеток по строкам и столбцам СложнаяПоездки на самокате с лимитом дороги Сложная
загружаем Python…
Вход
values=[6, 2, 9, 4, 20, 7], gap=2
Ожидается
[2, 4, 6, 7, 20, 9]

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