// 解法一:
// 最小值一定与最大值相邻,所以只要找到第一个非递增的位置的后一个元素就是答案
class Solution {
public:
int minArray(vector<int>& numbers) {
int i,sz=numbers.size();
for(i=0;i<numbers.size();i++){
if(numbers[i%sz]>numbers[(i+1)%sz])
break;
}
return numbers[(i+1)%sz];
}
};
// 解法二:二分查找
class Solution {
public:
int minArray(vector<int>& numbers) {
int sz=numbers.size();
int left=0, right=sz-1;
while(left<right){
int mid=left+(right-left)/2;
if(numbers[mid]<numbers[right]){
right=mid;
}
else if(numbers[mid]>numbers[right]){
left=mid+1;
}
else
// 去重
right--;
}
return numbers[left];
}
};