旋轉數組最小的數
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;
}