Как найти границы массива с неограниченным размером

0

Недавно я столкнулся с этим вопросом в интервью.

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

Я действительно пытался использовать log (n).

Моя идея - искать элемент в индексе-2 массива. Если элемент в индексе-2 меньше заданного числа, посмотрите на индекс-4, если элемент еще меньше смотрит на индекс 8 и скоро.

Поэтому основная идея состоит в том, чтобы увеличить значение я от 2 до j, где arr [j]> заданное число, а затем выполнить двоичный поиск по arr [j/2] и arr [j].

Но потом я застрял в том, как обрабатывать случай, когда данный элемент отсутствует в массиве.

Как обрабатывать этот случай в c++, поскольку я не думаю, что c++ будет выходить за пределы исключения?

Любые идеи действительно помогут...

  • 2
    Я думаю, что алгоритм будет решающим образом зависеть от того, что происходит, когда вы пытаетесь получить доступ к элементу, который находится за пределами. Вы спрашивали об этом интервьюера? Если вы сделали, пожалуйста, отредактируйте их ответ на вопрос.
  • 0
    Эта техника называется экспоненциальным поиском .
Показать ещё 16 комментариев
Теги:
arrays

2 ответа

0

Вы не можете выполнить решение log (n), когда вы не знаете размер массива. То, что вы можете сделать, это простой линейный поиск. Ключевым моментом здесь является то, что массив сортируется, это означает, что если вы обнаружите, что элемент больше, чем тот, который вы ищете, в этом массиве нет.

Итерайте до тех пор, пока A) вы не найдете предмет, который вы ищете, или B) вы найдете элемент, который больше, чем тот предмет, который вы ищете. Если A) возвращает текущий индекс, если B) возвращает -1.

  • 0
    Вы не можете выполнять этот линейный поиск, так как A) у вас нет гарантии, что вы найдете нужный вам предмет, и B) у вас нет гарантии, что вы найдете элемент, который больше, чем тот, который вы ищете. Как насчет поиска числа 5 в массиве, заполненном нулями, например? Массив сортируется!
  • 0
    Можно было бы поместить элементы в конец массива, чтобы убедиться, что они существуют, но вы не знаете размер массива. Есть проблема.
0

просто получите размер с этой функцией, если он доступен в вашей рабочей среде, и память была выделена в кучу

http://msdn.microsoft.com/en-us/library/z2s077bc.aspx

и выполнять простой двоичный поиск

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню