可以数组最左边的数为基准二分
旋转数组的最小数字
http://www.nowcoder.com/questionTerminal/9f3231a991af4f55b95579b44b7a01ba
//以数组最左边的数作为比较基准
public int minNumberInRotateArray(int [] array) {
if(array.length==0) {
return 0;
}
int left=0;
int right=array.length-1;
//left==right时即找到了最小值,退出循环
while(left<right){
//数组没有旋转,直接返回第一个
if(array[left]<array[right]){
return array[left];
}
int mid = left + ((right-left)>>1);
//array[0~mid]不可能是最小值了
if(array[mid]>array[left]){
left = mid+1;
}
//array[mid]还有可能是最小值
//也可以排除array[left],且左右一起逼近不会造成left>right(因为left<mid,left+1<=mid=right),所以不影响while循环条件
else if(array[mid]<array[left]){
right = mid;
left++;//可有可无
}
//array[mid]==array[left]时,也可以继续向右缩小区间,
//因为array[left]就算是最小值中的一个,也有array[mid]可以替代
else{
left++;
}
}
//退出循环时left==right
return array[left];
} 
查看18道真题和解析