剑指Offer11-旋转数组中的最小数-二分

原题链接
剑指Offer11-旋转数组中的最小数-二分_第1张图片

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]);
    }
};

你可能感兴趣的:(剑指Offer,算法,c++,数据结构,二分)