二分法:
不推荐,在线面试容易出错。
public int minNumberInRotateArray(int [] array) {
int index= getRotate(array,0,array.length-1);
return array[index];
}
public int getRotate(int[] array,int start,int end){
int mid = (start+end)/2;
if(end-start==1){
return array[start]<array[end]?start:end;
}
if(array[mid]>array[end]){
return getRotate(array,mid,end);
}else if(array[mid]<array[start]){
return getRotate(array,start,mid);
}else{
return mid;
}
}
遍历法:
找到第一个小于之前的值
public int minNumberInRotateArray(int [] array) {
int before = array[0];
for(int data:array){
if(data<before){
return data;
}
before = data;
}
return array[0];
}