1 import java.util.ArrayList; 2 public class Solution { 3 public int minNumberInRotateArray(int [] array) { 4 if(array==null || array.length==0){ 5 return 0; 6 } 7 int left=0; 8 int right=array.length-1; 9 int index=left; 10 int indexMid; 11 while(array[left]>=array[right]){ 12 if(right-left==1){ 13 index=right; 14 break; 15 } 16 indexMid=(left+right)/2; 17 if(array[indexMid]==array[left] && array[indexMid]==array[right]){ 18 // 如果三个数都相等,则需要进行顺序处理,从头到尾找最小的值 19 //考虑对于{1,2,2,2,2,2} --> {2,2,2,2,2,1,2} 这种有重复值的,二分只适合 20 //在有序的基础上遍历,只能遍历整个整个这部分的数组了。 21 for(int i=1;i<array.length;i++){ 22 int min=array[0]; 23 if(min>array[i]){ 24 return array[i]; 25 } 26 } 27 }else if(array[indexMid]>=array[left]){ 28 // 如果中间位置对应的值在前一个排好序的部分,将left设置为新的处理位置 29 left=indexMid; 30 }else { 31 // 如果中间位置对应的值在后一个排好序的部分,将right设置为新的处理位置 32 right=indexMid; 33 } 34 } 35 return array[index]; 36 } 37 }
原文:https://www.cnblogs.com/wangqiong/p/11761125.html