题解 | #旋转数组的最小数字#
旋转数组的最小数字
http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
int left=0;
int right=array.length-1;
// 特殊情况1:把非降序数组的0个元素搬到数组末尾
if(array[left]<array[right]){
return array[left];
}
while(left<right-1){
int mid=(left+right)/2;
// 特殊情况2:array[left],array[right],array[mid]都相等,这样的话,如果让这个情况去执行下面两个if,那就会是left=mid=right,然后return array[right],但是这个array[right]不一定是最小值
if(array[left]==array[mid]&&array[mid]==array[right]){
int minIndex=0;
for(int i=1;i<array.length-1;i++){
if(array[minIndex]>array[i]){
minIndex=i;
}
}
return array[minIndex];
}
if(array[mid]>=array[left]){
left=mid;
}
if(array[mid]<=array[right]){
right=mid;
}
}
return array[right];
}
}