剑指offer---旋转数组中最小的数字(8)

来源:互联网 发布:网络生活服务类平台 编辑:程序博客网 时间:2024/06/05 16:41


题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的逆转。输入一个递增排序的数组的一个逆转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为数组{1,2,3,4,5}的一个旋转,该数组的最小值为1。

#include <iostream>using namespace std;int MinInorder(int* arr,int index1,int index2){    int tmp = arr[index1];    for(int i=index1+1;i<index2;i++)    {        if(arr[i] < tmp)        {            tmp = arr[i];        }    }    return tmp;}int Min(int*arr,int len){    if(arr == NULL || len<=0)        throw new exception("Invalid parameters");    int index1 = 0;    int index2 = len-1;    int midIndex = index1;    while(arr[index1] >= arr[index2])    {        //如果index1和index2相邻        if(index2-index1 == 1)        {            midIndex = index2;            break;        }        midIndex = (index1+index2)/2;        //如果index1==index2==midindex        if(arr[index1]==arr[index2] && arr[midIndex] == arr[index1])        {            return MinInorder(arr,index1,index2);        }        if(arr[midIndex] >= arr[index1])        {            index1 = midIndex;        }        else if(arr[midIndex] <= arr[index2] )        {            index2 = midIndex;        }    }    return arr[midIndex];}int main(){    int arr[]={3,4,5,1,2};    int arr1[]= {1,0,1,1,1};    int flg = Min(arr1,sizeof(arr)/sizeof(arr[0]));    cout<<flg<<endl;    return 0;}
原创粉丝点击