思路:
首先我们观察题目要求时间复杂度为logn,又是一个半有序序列此时我们就应该联想到折半查找查找半有序序列。
int minNumberInRotateArray(int* rotateArray, int rotateArrayLen ) {
// write code here
int left = 0;
int right = rotateArrayLen-1;
int mid;
while(left<right){
mid = (left+right)/2;
if(rotateArray[mid]<rotateArray[right]){
right=mid; //如果mid的值小 说明还是在有序序列内 需要将right=mid
}else if(rotateArray[mid]>rotateArray[right]){
left = mid+1; //出了递增序列 所以要把left向提到mid+1处 如果不提+1会死循环 如果只有两个数字
}else{
right--; //如果相等则可能在mid左或者右 需要一个个试 left++ right--都可以
}
}
return rotateArray[left]; //此处left == right
}