Ответ
Для логарифмической сложности поиска O(log n) массив должен быть отсортирован. Тогда можно использовать бинарный поиск:
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
const sortedArray = [1, 3, 5, 7, 9];
console.log(binarySearch(sortedArray, 5)); // 2
Ключевые моменты:
- Массив должен быть отсортирован (по возрастанию/убыванию)
- Бинарный поиск делит массив пополам на каждой итерации
- Сложность сортировки O(n log n) выполняется один раз, затем поиск O(log n)
Ответ 18+ 🔞
А, ну ты глянь, классика жанра, блядь! Чтобы искать за O(log n), надо, чтобы массив был как миленький отсортирован, ёпта. Иначе никакой бинарный поиск не взлетит, это ж как пытаться найти чёрную кошку в тёмной комнате, если её там, блядь, нет, да ещё и кошки разбежались кто куда.
Вот смотри, как это работает, если всё по уму:
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) return mid;
if (arr[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}
const sortedArray = [1, 3, 5, 7, 9];
console.log(binarySearch(sortedArray, 5)); // 2
Суть в чём, блядь? Берём отсортированный массив, делим его пополам, смотрим — нашёлся элемент или нет. Если нет, то отбрасываем ту половину, где его точно быть не может, и повторяем фокус с оставшейся частью. И так до победного конца, пока либо не найдём, либо не поймём, что его тут нихуя нет.
А теперь главное, что надо запомнить, чтобы не облажаться:
- Массив должен быть отсортирован. Это святое, блядь! Иначе алгоритм превратится в тыкву, то есть в полную хуйню, которая ничего не найдёт. Сортировка сама по себе — это O(n log n), но её делают один раз, а потом уже ищут сколько влезет за O(log n).
- Бинарный поиск на каждом шагу откусывает половину. Вот в этом и весь прикол, ёпта. Не надо бегать по всем элементам, как курица с отрубленной головой. Делим пополам — и сразу отсекаем кучу ненужного.
- Сложность O(log n) — это овердохуища быстро. Особенно когда элементов много. Это как найти иголку в стоге сена, если предварительно разложить всё это сено по алфавиту и номеру, блядь.
Короче, сортируй массив один раз — и потом ищи хоть до посинения, быстро и без нервов. А если не отсортирован — ну, извини, тогда только линейный поиск, O(n), и никаких тебе чудес, в рот меня чих-пых.