Чтобы суммировать все комментарии:
Решите эту проблему, поскольку грубая сила займет O(n)
время, как итерация для каждого элемента в D, и проверьте, меньше ли его расстояние от k
, чем n
.
У вас большой набор данных, но много запросов, лучше выполнить предварительную обработку на D (с O(nlogn)
, и вы можете получить ответ в O(logn)
->, отсортировав D как предварительнопроцессы (в O(nlogn)
как массив типа dimple.
Теперь, при заданном поиске для поиска k
- заметьте, что двоичный поиск остановится, если число пропущено, но он do остановится наближайшее значение. Из этого индекса начните спред по обе стороны от D и для каждой проверки, если он все еще находится в диапазоне n
. Обратите внимание на расширение в разрешении, поскольку оно включает O(|output|)
.
В вашем примере: отсортированоD
yield: [0,5,6,7,9]
. Попытка найти k=8
выдаст false, но индекс 3 или 4. (зависит от реализации). Допустим, скажем, возвращаем индекс 3. для 3 до последней проверки индекса, если arr[i] - k < n
, если так, print -если больше стоп . Для другой стороны проверьте k - arr[i] < n
- если это так, напечатайте и если больше стоп -> это даст вам 7,9
Надеюсь, что поможет!