Недавно я столкнулся с этим вопросом в интервью.
Я должен написать функцию (с параметрами, указателем на начало отсортированного массива неизвестного размера и числа, который должен быть найден), чтобы найти индекс данного номера. Если данный элемент отсутствует в массиве, Я должен вернуть -1.
Я действительно пытался использовать log (n).
Моя идея - искать элемент в индексе-2 массива. Если элемент в индексе-2 меньше заданного числа, посмотрите на индекс-4, если элемент еще меньше смотрит на индекс 8 и скоро.
Поэтому основная идея состоит в том, чтобы увеличить значение я от 2 до j, где arr [j]> заданное число, а затем выполнить двоичный поиск по arr [j/2] и arr [j].
Но потом я застрял в том, как обрабатывать случай, когда данный элемент отсутствует в массиве.
Как обрабатывать этот случай в c++, поскольку я не думаю, что c++ будет выходить за пределы исключения?
Любые идеи действительно помогут...
Вы не можете выполнить решение log (n), когда вы не знаете размер массива. То, что вы можете сделать, это простой линейный поиск. Ключевым моментом здесь является то, что массив сортируется, это означает, что если вы обнаружите, что элемент больше, чем тот, который вы ищете, в этом массиве нет.
Итерайте до тех пор, пока A) вы не найдете предмет, который вы ищете, или B) вы найдете элемент, который больше, чем тот предмет, который вы ищете. Если A) возвращает текущий индекс, если B) возвращает -1.
просто получите размер с этой функцией, если он доступен в вашей рабочей среде, и память была выделена в кучу
http://msdn.microsoft.com/en-us/library/z2s077bc.aspx
и выполнять простой двоичный поиск
если вы хотите, чтобы число было в массиве (это не нужно в этом случае, но давая вам общий подсказку), вы можете заменить некоторые в массиве, если он изменен с помощью часового (чтобы избежать изменения размера).