您的位置:首页 > Web前端

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

2017-12-05 10:57 337 查看
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的逆转。输入一个递增排序的数组的一个逆转,输出旋转数组的最小元素。例如数组{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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息