Note:
因为有重复元素存在,平常的二分就不好用了,每次如果二分完是值相等的话,就让r --
至于为什么正确,模拟一遍就知道了,反正从头想也想不到,记住就行了
是因为如果不满足条件的话,操作的是l + 1
而且最后返回的也是num[l]
代码如下:
class Solution {
public:
int minArray(vector<int>& numbers) {
int l = 0, r = numbers.size() - 1;
while(l < r){
int mid = l + r >> 1;
if(numbers[mid] <= numbers[0]) r = mid;
else if() l = mid + 1;
}
return min(numbers[0], numbers[r]);
}
};