Ctrl K

K-я дырка в отсортированном списке

Средняя
Дан строго возрастающий массив целых чисел values и число rank. Будем перебирать целые числа по возрастанию, начиная с values[0], и отмечать те, которых нет в values. Верните rank-е по счёту такое пропущенное число (считая с единицы). Пропущенные числа могут быть и больше последнего элемента массива. Линейный проход очевиден — попробуйте найти ответ за O(log n).
Пример 1
values=[3, 6, 7, 11], rank=2 → 5

Начиная с 3, пропущены числа 4, 5, 8, 9, 10, … Второе из них — 5.

Пример 2
values=[3, 6, 7, 11], rank=4 → 9

В том же списке четвёртое пропущенное число — 9.

Пример 3
values=[2, 3, 4], rank=2 → 6

Внутри списка пропусков нет, дальше идут 5, 6, … — второе из них 6.

Ограничения
  • 1 ≤ len(values) ≤ 5·10⁴
  • 1 ≤ values[i] ≤ 10⁷
  • values строго возрастает
  • 1 ≤ rank ≤ 10⁸
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПоиск в сдвинутом отсортированном массиве СредняяПервая и последняя копия СредняяПоиск в таблице-цепочке СредняяПоиск в сдвинутом массиве с повторами СредняяМинимум в сдвинутом списке Средняя
загружаем Python…
Вход
values=[3, 6, 7, 11], rank=2
Ожидается
5

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