Мне нужно написать функцию, которая возвращает индекс максимального значения в циклически отсортированном массиве, без дубликатов в O (logn).
Я уже пробовал этот код, и он работает, но дляПо какой-то причине я получаю сообщение об ошибке, когда массив содержит 2 или 6 элементов.Я не совсем понимаю, что с ним не так, что он работает для любой длины массива, кроме этих двух значений.
int arr[];
int search;
int index=sizeof(arr)/sizeof(*arr) - 1;
int min=0;
int max=sizeof(arr)/sizeof(*arr) - 1;
int mid;
int m=index;
while (min!=max) {
mid=(min+max)/2;
if (arr[m] < arr[mid]) {
min=mid+1;
index=mid;
max=max;
}
else if (arr[m] > arr[mid]) {
max=mid-1;
min=min;
}
else {
index=m;
}
if (min==max)
break;
}
cout << index;
Примеры:
Ввод: 1 2 3 4 5
Выход: 4
Вход: 3 4 5 1 2
Выход: 2
Вход: 9 1 2 3
Выход: 0
Ввод: 1 2 или 1 2 3 4 5 6
Выход: ОШИБКА
Я также включил cout<<min<<max<<mid
в то время, чтобы проверить, что происходит, когда длина равна 2или 6, и я получаю бесконечный цикл с 0-10 выходами.Буду признателен за любую помощь.Заранее спасибо!