旋转数组最小的数
import java.util.ArrayList;
/**
* @Author JH
* @CreateDate 18-6-1
* @Description 旋转数组最小的数
* 利用旋转数组两部分有序的特点,使用二分法划分 如果中间值大于末尾值则说明最小数在mid-high之间
* 如果中间值小于low的值说明最小值在low-mid之间,
* 时间复杂度:logn
*/
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array==null||array.length<=0)return 0;
int index=minNumber(array,array.length-1,0);
return index;
}
public int minNumber(int [] array,int h,int l){
int mid=l;
while(array[h]<=array[l]){
if (array[l]==array[mid]&&array[l]==array[h]&&array[mid]==array[h])
return minInOrder(array);
if (h-l==1) {
mid=h;
break;
}
mid=(h+l)/2;
if(array[h]>=array[mid])h=mid;
else if(array[mid]>=array[l])l=mid;
}
return array[mid];
}
public int minInOrder(int a[]){
int min=a[0];
for (int i=1;i<a.length;i++){
if (min>a[i])min=a[i];
}
return min;
}