可以数组最左边的数为基准二分
旋转数组的最小数字
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]; }