一,题目
有这样一个长度为n数组,从小到大,再从小到大,例如:[5,6,7,8, 3,4,5,6],求出它的最小值?
public class testMain {
public static void main(String[] args) {
Integer[] arr=new Integer[]{5,6,7,8,1,2,3,4};
Integer min = getMin(arr);
System.err.println(min);
}
private static Integer getMin(Integer[] arr){
int length = arr.length;
int result=Integer.MAX_VALUE;
int right=0;
int left=length-1;
int min=(left+right)/2;
result= doIt(arr, right, min, result,min);
result= doIt(arr, min, left, result, min);
return result;
}
/**
利用二分法,再利用递归,求出它的最小值
*/
private static Integer doIt(Integer[] arr, int right, int left,int result,int min){
if(left==right){
return result;
}
if(arr[min]<result){
result=arr[min];
}
if(arr[min]>arr[min+1]){
result=arr[min+1];
return result;
}
min=(left+right)/2;
left=min;
doIt(arr,right,left,result,min);
return result;
}
}