Количество элементов, доступных для двоичного поиска в данном массиве

Опубликовано: 21 Сентября, 2022

Учитывая массив arr[] , состоящий из N целых чисел, задача состоит в том, чтобы найти максимальное количество целых чисел, доступных для двоичного поиска в данном массиве.

Примеры:

Input: arr[] = {1, 3, 2}
Output: 2
Explanation: arr[0], arr[1] can be found.

Input: arr[] = {3, 2, 1, 10, 23, 22, 21}
Output: 3
Explanation: arr[1], arr[3], arr[5] can be found using binary search irrespective of whether the array is sorted or not.

Подход: данная проблема может быть решена путем поиска каждого элемента отдельно в массиве с использованием подхода двоичного поиска и увеличения количества тех целых чисел, которые существуют в массиве. Выполните следующие шаги, чтобы решить проблему:

  • Создайте переменную count = 0 , которая будет хранить количество элементов, доступных для двоичного поиска.
  • Для каждого элемента выполните бинарный поиск в диапазоне [0, N) как:
    • Инициализируйте переменную l как 0 и r как N-1 и выполните двоичный поиск для arr[i] .
    • Для каждой итерации цикла while, пока l не станет меньше r, вычислите среднее значение, обозначаемое как (l + r)/2 .
      • Если arr[mid] равно arr[i] , тогда счетчик увеличивается на 1 .
      • Если arr[mid] меньше, чем arr[i], то замените l на mid + 1 .
      • В противном случае измените r на mid – 1 .
  • Окончательный ответ будет храниться в переменной count .

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O (N * log (N))
Вспомогательное пространство: O(1)

РЕКОМЕНДУЕМЫЕ СТАТЬИ