方法来自剑指offer里的解答,其实还有很多其他方法可以使时间复杂度小于O(n),但是这个解法可以利用到数组一部分有序的特性,这样能大大减少时间复杂度,程序使用的方法和二分查找类似,以下是代码
public class Solution {
public int minNumberInRotateArray(int [] array) {
int p1=0,p2=array.length-1;
while((p2-p1)>1){
int midIndex=(p1+p2)/2;
if(array[p1]==array[midIndex]&&array[midIndex]==array[p2])
return inOrder(array,p1,p2);
if(array[midIndex]<=array[p2])
p2=midIndex;
else
p1=midIndex;
}
return Math.min(array[p1],array[p2]);
}
public int inOrder(int[] array,int p1,int p2){
int result=array[p1];
while(p1<=p2){
result=Math.min(result,array[p1]);
p1++;
}
return result;
}
}