题解 | #旋转数组的最小数字#
旋转数组的最小数字
http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
描述 有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。
数据范围:1 \le n \le 100001≤n≤10000,数组中任意元素的值: 0 \le val \le 100000≤val≤10000 要求:空间复杂度:O(1)O(1) ,时间复杂度:O(logn)O(logn)
public class Solution {
public int minNumberInRotateArray(int [] array){
int len = array.length;
int right=len-1;
int left =0;
while(left<right){
int mid = (left+right)/2;
//如果array[mid]>array[right],说明后面的数更小,且当前中间值不为最小值,因此left+1
if(array[mid]>array[right]){
left=mid+1;
}
//如果中间的值小于右边的值,说明前面的值有可能存在更小的值,也有可能当前的中间值就是最小值,因此不能设置right=mid-1;
//而是right=mid;
else if(array[mid]<array[right]){
right = mid;
}
else{
right--;
}
}
return array[right];
}
}