将旋转数组分成两部分,将前部分放到后一部分的后面
那么最小值就是新数组后部分的第一个值
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) {
int left = 0, right = rotateArrayLen-1;
while(left < right)
{
int mid = (left+right) / 2;//取中间值
if(rotateArray[mid] > rotateArray[right])
left = mid+1;//中间值大于最后一个值说明中间值不属于后部分,
//而属于前部分,那么最小值就在后部分,搜索中间值的右边
else if(rotateArray[mid] < rotateArray[right])
right = mid;//中间值小于最后一个值说明中间值属于后部分,
//那么最小值就在中间值及其前面的数中找
else //如果中间值等于最后一个值,那么不知道它是属于前部分还是后部分
right --; //缩短数组
}
return rotateArray[left];
}