Ctrl K

Ближайший близнец на кольце

Средняя
Вдоль круговой аллеи стоят фонари, их цвета записаны в массиве colors: после последнего фонаря снова идёт первый. За один шаг можно перейти к соседнему фонарю в любую сторону, так что расстояние между позициями i и j — это меньшее из |i - j| и n - |i - j|, где n — число фонарей. Дан массив запросов asks, каждый запрос — номер фонаря (с нуля). Для каждого запроса найдите расстояние до ближайшего **другого** фонаря того же цвета. Если такого фонаря нет, ответ на запрос -1. Верните массив ответов в том же порядке, что и запросы.
Пример 1
colors=[4, 7, 2, 4, 9, 7], asks=[0, 1, 4] → [3, 2, -1]

Фонарь 0 (цвет 4) — ближайший такой же на позиции 3, до него 3 шага в любую сторону. Фонарь 1 (цвет 7) — второй цвет 7 на позиции 5: напрямую 4 шага, а через начало кольца 1 → 0 → 5 всего 2. Цвет 9 встречается один раз, поэтому -1.

Пример 2
colors=[5, 5, 5, 5], asks=[2, 3] → [1, 1]

У каждого фонаря соседи того же цвета, расстояние 1.

Пример 3
colors=[8], asks=[0] → [-1]
Ограничения
  • 1 ≤ len(asks) ≤ len(colors) ≤ 10⁵
  • 1 ≤ colors[i] ≤ 10⁶
  • 0 ≤ asks[i] < len(colors)
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПары с заданной разницей СредняяСлова, спрятанные в тексте СредняяСамая длинная цепочка с равным шагом СредняяВес по первой букве алфавита СредняяОбщее число во всех строках Средняя
загружаем Python…
Вход
colors=[4, 7, 2, 4, 9, 7], asks=[0, 1, 4]
Ожидается
[3, 2, -1]

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