这题思维要考虑全面,否则很容易出错!!!
class Solution {
public:
int minArray(vector<int>& numbers) {
//二分法
if(numbers.size()==0)
return -1;
int low=0,high=numbers.size()-1;
while(low<high)
{
int mid=(low+high)/2;
if(numbers[mid]>numbers[high])//此时中间元素一定在前面的递增序列
{
//显然,分割点在右边
low=mid+1;
}
else if(numbers[mid]<numbers[high])//此时中间元素一定在后面的递增序列
{
//显然,分割点在左边(mid本身也有可能是分割点)
high=mid;
}
else//此时中间元素在前段还是后段不确定
{
//去重
high--;
}
}
return numbers[low];
}
};