旋转数组的最小数字
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输
出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
可以利用二分法查找,当start<=mid的时候,则最小值应当在mid和end之间,否则应该在start和mid之间。
另外,如果start==mid==end,则无法判断最小值在哪个区间,就只有顺序查找了。
public int minNumberInRotateArray(int [] array) {
if(array.length<=0){
return 0;
}else if(array[0]<array[array.length-1]){
return array[0];
}
return divide(array,0,array.length-1);
}
private int divide(int[] array,int start,int end){
if(end-start==1){
return array[end];
}else{
int mid=(start+end)/2;
if(array[start]==array[end]&&array[start]==array[mid]){//无法确定最小值在哪个区间,只能顺序查找
return minInorder(array);
}
if(array[start]<=array[mid]){
return divide(array,mid,end);
}else{
return divide(array,start,mid);
}
}
}
private int minInorder(int [] array){
int min=array[0];
for(int i=0;i<array.length;i++){
if(min>array[i]){
min=array[i];
}
}
return min;
}

浙公网安备 33010602011771号