class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
int size=rotateArray.size();
if (size==0){
return 0;
}
if (size==1){
return rotateArray[0];
}
int front=0,rear=size-1;
int mid=front;
while(rotateArray[front]>=rotateArray[rear]){
if(rear-front==1){ //循环退出条件
break;
}
mid=(front+rear)/2;
if(rotateArray[front]==rotateArray[mid] && rotateArray[mid]==rotateArray[rear]){
//头部、中部、尾部全部相同时,需逐个遍历求解最小值
rear= findmin(rotateArray,front,rear);
break;
}
if(rotateArray[mid]>=rotateArray[front]){
front=mid;
}else if(rotateArray[mid]<=rotateArray[rear]){
rear=mid;
}
mid=(front+rear)/2;
}
return rotateArray[rear];
}
int findmin( const vector<int> &rotateArray, int front, int rear){
int min_pos=front;
for(int i= front+1;i<=rear;i++){
if(rotateArray[min_pos]>rotateArray[i]){
min_pos=i;
}
}
return rotateArray[min_pos];
}
};
原文:https://www.cnblogs.com/fancy-li/p/11610314.html