這道題目用到了二分查找的思想。
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];
}
};