/**

  • 旋转数组的最小数字

  • 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

  • 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。

  • 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

  • NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

  • /
    public class offer_6 {
    public static int minNumberInRotateArray1(int [] array) {

      if (array==null){
          return 0;
      }
      int pre=0;
      int tail=array.length-1;
      while (pre<tail){
          if (array[pre]<array[tail]){
              return array[pre];
          }
          int mid=(pre+tail)/2;
          if (array[pre]<array[mid]){
              pre=mid;
          }else if (array[tail]>array[mid]){
              tail=mid;
          }else {
              pre++;
          }
      }
      return array[pre];

    }

    public static int minNumberInRotateArray2(int [] array) {

      if (array==null){
          return 0;
      }
      if (array.length==1){
          return array[0];
      }
      int pre=0;
      int tail=array.length-1;
      while (pre<tail){
          if (array[pre]<array[tail]){
              return array[pre];
          }
          int mid=(pre+tail)/2;
          if (array[pre]<array[mid]){
              pre=mid;
          }else if (array[tail]>array[mid]){
              tail=mid;
          }else {
              tail--;
          }
      }
      return array[tail+1];

    }
    public static void main(String[] args) {

      int array[]={1,1,1,1,0};
      System.out.println(minNumberInRotateArray1(array));
      System.out.println(minNumberInRotateArray2(array));

    }
    }

用tail--的那种的时候有特殊情况,前一种pre可以,后一种tail不对