Ctrl K

Пары с ограниченным разрывом

Сложная
Даны два массива целых чисел first и second одинаковой длины n и целое число slack. Верните количество пар индексов (i, j), для которых 0 ≤ i < j ≤ n - 1 и выполняется first[i] - first[j] ≤ second[i] - second[j] + slack. Перебор всех пар за O(n²) при n до 10⁵ слишком медленный.
Пример 1
first=[4, 1, 6], second=[1, 1, 3], slack=0 → 2

Пара (0, 1): 4 − 1 = 3, а 1 − 1 + 0 = 0, не подходит. Пара (0, 2): −2 ≤ −2, подходит. Пара (1, 2): −5 ≤ −2, подходит. Итого 2.

Пример 2
first=[2, 2, 2], second=[1, 2, 3], slack=1 → 2

Слева всегда 0. Справа: для (0, 1) получается 0, для (0, 2) — −1, для (1, 2) — 0. Подходят пары (0, 1) и (1, 2).

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

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