题目:把一个数字最开始的若干个元素搬移到末尾,称之为数组的旋转。输入一个递增排序数组的一个旋转,输出最小元素。例如输入{3,4,5,1,2}求出最小数字。
利用二分查找的思想,用一个指针指向开头,另一个指针指向末尾,然后找到中间位置,如果中间位置的值大于开头元素的值,则说明旋转的部分在中间位置的后面,则从后面的位置中使用同样的方法寻找,如果中间的值小于末尾的值,说明最小值应该是中间值或中间值的前面。
int min(int* arr,int len)
{
if(arr == NULL || len <= 0)
{
throw new exception("Invalid parameters");
}
int start = 0;
int end = len - 1;
int mid = 0;
while(arr[start] >= arr[end])
{
if(end - start == 1)
{
mid = end;
break;
}
mid = (start + end) / 2;
if(arr[mid] >= arr[start])
{
start = mid;
}
else if(arr[mid] <= arr[end])
{
end = mid;
}
}
return arr[mid];
}