Учитывая отсортированный массив различных целых чисел A [1,. , , , n], вы хотите узнать, есть ли индекс i, для которого A [i] = i. Дайте алгоритм разделения и покоя, который выполняется во времени O (log n).Поиск указателя i, где A [i] = i
То, что я до сих пор придумал, - это модифицированный двоичный поиск, который выкинет правую половину массива в зависимости от проверки элемента, который у нас есть как точка поворота в бинарном поиске на данный момент.
modifiedBinSearch(a[1],a[n]){
int i = a.length/2;
if(a[i]==i) return i;
if(i>a[i]) return ModifiedBinSearch(a[1],a[i]);
else return ModifiedBinSearch(a[i], a[n]);
}
ли этот алгоритм запуска в O (журнал п) время? А если нет, что мне делать, чтобы заставить его работать в O (log n)?
Вы псевдо-код (или код?) Выглядит странно. Что означает «a [1], a [n]» означает (действительно ли вы передаете индексы или что)? – kraskevich
Ваш анализ верен, ваш псевдокод странный, и, похоже, он также не имеет условия остановки для отказа найти такое значение. – amit
Хороший мозговой тизер, но он сильно зависит от того, разрешены ли повторяющиеся и/или отрицательные значения. Ответ, который вы приняли, едва ли связан с проблемой. –