剑指 Offer 11. 旋转数组的最小数字C++

题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 剑指 Offer 11. 旋转数组的最小数字C++_第1张图片
解题思路:先用二分法排好序。
代码:
class Solution {
public:
    int minArray(vector<int>& numbers) {
        if(numbers.size()==0) return -1;
        if(numbers.size()==1) return numbers[0];
        int l=0,r=numbers.size()-1;
        int mid;
        while(l<r){
            if(r-l==1)
            return (numbers[l]<=numbers[r]) ? numbers[l]:numbers[r];
            mid=(l+r)/2;
            if(numbers[mid]>numbers[r]) l=mid;
            else if (numbers[mid]<numbers[l]) r=mid;
            else r--;
        }
        return 1;
    }
};

你可能感兴趣的:(剑指offer)