题解 | #旋转数组的最小数字#
旋转数组的最小数字
http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
思路:二分法三种情况
1.如果mid>right,说明mid-right之间存在被旋转数组,left = mid+1
2.如果mid<right,说明mid右侧整体有序,最小的定在mid(包含)及其左边
3.如果mid=right,无法判断,只能缩小范围right --;
import java.util.ArrayList; public class Solution { public int minNumberInRotateArray(int [] array) { int left = 0; int right = array.length - 1; while(left < right){ int mid = left + (right - left) / 2; //说明mid-right为被旋转的部分,最小的应该在mid之前可能包含mid 561234 if(array[mid] < array[right]){ right = mid; } else if(array[mid] > array[right]){ left = mid + 1; } else{ right = right - 1; } } return array[left]; } }