题解 | #旋转数组的最小数字#
旋转数组的最小数字
http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
int Special_arry(int a[],int left,int right){
int min = a[left];
int i ;
for(i=left;i<=right;i++)
{
if(a[i]<min)
min = a[i];
}
return min;
}
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) {
int num;
int left=0;
int right = rotateArrayLen-1;
int mid = left;
if(rotateArrayLen==0)
return NULL;
if(rotateArrayLen==1)
return rotateArray[0];
if(rotateArrayLen==2)
return rotateArray[0]>rotateArray[1]?rotateArray[1]:rotateArray[0];
while(rotateArray[left]>=rotateArray[right])
{
if(right-left<=1)
{
mid=right;
break;
}
mid = (left+right)/2;
if(rotateArray[left]==rotateArray[mid]&&rotateArray[right]==rotateArray[mid])
return Special_arry(rotateArray,left,right);
if(rotateArray[mid]>=rotateArray[left])
left = mid;
else if (rotateArray[mid]<=rotateArray[right])
right = mid;
}
return rotateArray[mid];
}