Ctrl K

Первый далёкий скачок

Средняя
Датчик записал показания readings (позиции с нуля). Даны два порога: min_gap и min_jump. Пара позиций p ≤ q подходит, если q - p ≥ min_gap и |readings[q] - readings[p]| ≥ min_jump. При min_gap = 0 позиции могут совпадать. Найдите подходящую пару с наименьшим возможным q. Партнёра p для этого q выбирайте среди позиций от 0 до q - min_gap так: - если самое низкое показание среди них подходит, берите его (при равенстве — самую раннюю позицию); - иначе берите самое высокое (тоже самую раннюю позицию среди равных). Верните [p, q] или [-1, -1], если подходящей пары нет. Нужно решение быстрее O(n²).
Пример 1
readings=[4, 9, 2, 6, 10], min_gap=2, min_jump=5 → [2, 4]

При q = 2 и q = 3 ни одно разрешённое показание не отличается от текущего хотя бы на 5. При q = 4 разрешены p от 0 до 2; самое низкое показание 2 (p = 2), и 10 - 2 = 8 ≥ 5.

Пример 2
readings=[8, 8, 1], min_gap=1, min_jump=6 → [0, 2]

При q = 2 самое низкое из показаний 8, 8 не ниже 1, зато самое высокое (8, первое — p = 0) выше на 7.

Пример 3
readings=[3, 5], min_gap=0, min_jump=0 → [0, 0]

При нулевых порогах подходит уже пара [0, 0].

Ограничения
  • 1 ≤ len(readings) ≤ 10⁵
  • 0 ≤ readings[i] ≤ 10⁹
  • 0 ≤ min_gap ≤ 10⁵
  • 0 ≤ min_jump ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДве доски и вода СредняяТройки с нулевой суммой СредняяСумма тройки ближе всего к цели СредняяЧетыре числа с заданной суммой СредняяСледующая расстановка по порядку Средняя
загружаем Python…
Вход
readings=[4, 9, 2, 6, 10], min_gap=2, min_jump=5
Ожидается
[2, 4]

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