剑指 Offer ------- 旋转数组的最小数字

在这里插入图片描述

思路:
这道题其实有点坑的。那就是如果数组李曼有重复值情况。比如3,1,1,2,2,2,2,2这种情况,这道题无疑就是用二分来做,只需要查找数组最后一个元素的分界线即可,但就是怕出现上面那种特殊的情况,这里的做法就是把要比较分界线末尾的元素再往前挪一位,用前一位去找分界线,如果前一位还有重复值,那么继续往前挪即可。

代码:

class Solution {
    
    
public:
    int minArray(vector<int>& numbers) {
    
    
        int i = 0, j = numbers.size() - 1;
        while (i < j) {
    
    
            int m = (i + j) / 2;
            if (numbers[m] > numbers[j]) i = m + 1;
            else if (numbers[m] < numbers[j]) j = m;
            else j--;
        }
        return numbers[i];
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43743711/article/details/115067229
今日推荐