在循环排序数组中查找最大值的索引

时间:2019-04-28 21:20:44

标签: c++ binary binary-search-tree

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

0 个答案:

没有答案