1 public int minNumberInRotateArray(int[] array) {  2 // 1、如果输入的数组为空,则返回0(返回0是题目要求的)  3 // 2、如果输入的数组的内容为空,则返回0(返回0是题目要求的)  4 if (array == null || array.length == 0) {  5 return 0;  6  }  7 // index1指向数组的开头  8 int index1 = 0;  9 // index2指向数组的的结尾 10 int index2 = array.length - 1; 11 int mid;//指向index1~index2的中间 12 while (array[index1] >= array[index2]) { 13 mid = (index1 + index2) / 2; 14 // 如果index1,index2,mid三者指向的数值相等的话,则顺序查找 15 if (array[index1] == array[index2] && 16 array[index1] == array[mid]) { 17 return orderSearch(array); 18  } 19 // 1、如果中间的值大于等于index1指向的值,说明,最小值在后面 20 // 2、将index1指向中间,缩小查找范围 21 if (array[mid] >= array[index1]) { 22 index1 = mid; 23  } 24 // 1、如果中间的值小于等于index2指向的值,说明,最小值在前面 25 // 2、将index2指向中间,缩小查找范围 26 if (array[mid] <= array[index2]) { 27 index2 = mid; 28  } 29 // 如果两个指针指向相邻的位置,则最小值是index2指向的值 30 if (index2 - index1 == 1) { 31 return array[index2]; 32  } 33  } 34 // 如果while条件不满足,说明序列本身就是已经排好序的(从小到大),则第一个是最小的 35 return array[index1]; 36  } 37 // 顺序查找最小值 38 public int orderSearch(int[] array) { 39 int result = array[0];//姑且认为第一个是最小的 40 for (int i = 0; i < array.length; i++) { 41 // 如果后面发现有比result还要小的,则将result替换 42 if (array[i] < result) { 43 result = array[i]; 44  } 45  } 46 // 返回最小值 47 return result; 48 }

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。