这道题目用到了二分查找的思想。
nums[middle] > nums[end] :可以确定最小数字在(middle+1,end)这个区间
nums[middle] < nums[end] :可以确定最小数字在(start, middle)这个区间
nums[middle] == nums[end] :这个情况比较特殊,不能确定最小数字在左边区间还是右边区间。举一个特殊例子:
1,0,1,1,1 或者 1,1,1,0,1。这个情况要 end--,达到缩小区间的效果。
class Solution {
public:
int minArray(vector<int>& numbers) {
if(numbers.size() == 0){
return 0;
}
int start = 0, end = numbers.size()-1;
int middle = (start + end) / 2;
while(numbers[middle] < numbers[middle+1]){
middle = (start + end) / 2;
start = middle + 1;
}
return numbers[middle+1];
}
};