旋转数组的最小数字

来源:互联网 发布:mac 版梦幻西游有么 编辑:程序博客网 时间:2024/06/16 10:13

题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减序列的一个旋转,输

出旋转数组的最小元素。例如数组{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;}
0 0