Ctrl K

Ближайшая пара датчиков

Сложная
На поле расставлены n датчиков: датчик i стоит в точке (xs[i], ys[i]). Расстояние между датчиками считается по городским кварталам: |x₁ - x₂| + |y₁ - y₂|. Найдите пару датчиков i < j с наименьшим расстоянием и верните [i, j]. Если таких пар несколько, верните лексикографически наименьшую: с меньшим i, а при равных i — с меньшим j. Два датчика могут стоять в одной точке. Перебор всех пар за O(n²) слишком медленный для больших n.
Пример 1
xs=[0, 4, 2, 5], ys=[3, 1, 2, 4] → [0, 2]

Датчики 0 и 2: |0 - 2| + |3 - 2| = 3. Пара (1, 2) тоже даёт 3, остальные пары дальше. Из двух пар с расстоянием 3 лексикографически меньше [0, 2].

Пример 2
xs=[1, 3, 1], ys=[2, 0, 2] → [0, 2]

Датчики 0 и 2 стоят в одной точке, расстояние 0.

Пример 3
xs=[2, 0], ys=[0, 2] → [0, 1]
Ограничения
  • 2 ≤ n = len(xs) = len(ys) ≤ 10⁵
  • 0 ≤ xs[i], ys[i] ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиУбрать одну точку СложнаяБлижайшие к базе точки СредняяПоворотная камера СложнаяПары углов без лишних соседей СложнаяЧистый прямоугольник на кнопках Сложная
загружаем Python…
Вход
xs=[0, 4, 2, 5], ys=[3, 1, 2, 4]
Ожидается
[0, 2]

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