题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
public static int minNumberRotateArray(int[] array){
if(array.length==0){
return Integer.MAX_VALUE;
}
if(array.length == 1){
return array[0];
}
int low = 0;
int high = array.length-1;
int mid = (low + high)/2;
int midVal = array[mid];
//若mid的值小于前后的值,直接返回
if(mid-1>=0 && array[mid-1]>midVal && mid+1<array.length && array[mid+1]>midVal){
return midVal;
}
//此时mid位于数组第一个元素
if(mid-1<0 && array[mid+1]>midVal){
return midVal;
}
//此时mid为数组最后一个元素
if(mid+1>=array.length && array[mid-1]>midVal){
return midVal;
}
int v1 = minNumberRotateArray(Arrays.copyOfRange(array,low,mid));
int v2 = minNumberRotateArray(Arrays.copyOfRange(array,mid+1,array.length));
return Math.min(v1,v2);
}