Поиск целевого элемента в упорядоченном массиве

Бинарный поиск уменьшает интервал вдвое после каждого сравнения. Итеративная реализация даёт O(log n) времени и O(1) дополнительной памяти.

Короткий ответ

Что ответить на собеседовании

Бинарный поиск уменьшает интервал вдвое после каждого сравнения. Итеративная реализация даёт O(log n) времени и O(1) дополнительной памяти.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию, получающую на вход упорядоченный массив целых чисел и значение, которое нужно найти. Если элемент присутствует в массиве, функция должна вернуть его позицию (индекс). Если элемент отсутствует, вернуть -1. Требуется обеспечить максимально возможную эффективность решения.

public class Live {
    public static void main(String[] args) {
        // пример использования
    }

    public static int search(int[] nums, int target) {
        // реализация
    }
}

Ответ

Бинарный поиск уменьшает интервал вдвое после каждого сравнения. Итеративная реализация даёт O(log n) времени и O(1) дополнительной памяти.

public static int search(int[] nums, int target) {
    int left = 0, right = nums.length - 1;
    while (left <= right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] == target) return mid;
        if (nums[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    return -1;
}

Требуется ненулевой массив, отсортированный по возрастанию. Пустой массив возвращает -1. При одинаковых значениях возвращается любое найденное вхождение, не обязательно первое. Формула mid избегает переполнения сложения left + right.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее