我必须编写一个函数,该函数返回循环排序数组中最大值的索引,而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”输出。
我将不胜感激任何帮助。预先感谢!