旋转数组的最小数字(JAVA)

旋转数组的最小数字

  

  题目描述

  把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
   
   思路:可知一个该旋转数组的特点是先递增后递减的,故若要得到最小的那个数字,需要找到那个畸变点。我能考虑到的有以下两种做法:
    1,从头开始遍历,直至开始遍历找到a[i+1]<a[i]时,a[i+1]为最小数。
    2,因为可能旋转的部分很大,畸变点在数组的非常后面,所以为了减少不必要的遍历,采用前后同时遍历来寻找畸变点。
    PS:因为题目说为非递减数组,所以可能存在数不增也不减的情况,即全部相同,所以初始min应设置为array[0]。
    
    
 1  public static int minNumberInRotateArray(int [] array) {
 2         if(array.length==0) return 0;
 3         int min = array[0];
 4         int i=0,j=array.length-1;
 5         for(;i<=j;i++,j--){
 6             if(array[i]>array[i+1]){
 7                 min = array[i+1];
 8                 break;
 9             }
10             if(array[j-1]>array[j]){
11                 min = array[j];
12                 break;
13             }
14         }
15         return min;
16     }

猜你喜欢

转载自www.cnblogs.com/ztqup666/p/9237287.html