旋转数组的最小数字(好题目!)

在这里插入图片描述
这题思维要考虑全面,否则很容易出错!!!
在这里插入图片描述

class Solution {
public:
    int minArray(vector<int>& numbers) {
        //二分法
        if(numbers.size()==0)
            return -1;
        int low=0,high=numbers.size()-1;
        while(low<high)
        {
            int mid=(low+high)/2;
            if(numbers[mid]>numbers[high])//此时中间元素一定在前面的递增序列
            {
                //显然,分割点在右边
                low=mid+1;

            }
            else if(numbers[mid]<numbers[high])//此时中间元素一定在后面的递增序列
            {
                //显然,分割点在左边(mid本身也有可能是分割点)
                high=mid;
            }
            else//此时中间元素在前段还是后段不确定
            {
                //去重
                high--;
            }

        }
        return numbers[low];

    }
};

猜你喜欢

转载自blog.csdn.net/ShenHang_/article/details/107541051