【2019秋冬】【剑指offer】旋转数组的最小数字

class Solution {
     
public:
    int minArray(vector<int>& numbers) {
     
        int max = numbers[0];
        for(int i=1; i<numbers.size(); i++){
     
            if(numbers[i]>=max){
     
                max = numbers[i];
                continue;
            }
            return numbers[i];
        }
        return numbers[0];
    }
};

注意一直递增和只有一个值的时候,都是第一个就最小,所以直接循环外返回

正确思路是使用二分法
跟右边比,因为左边比会有情况不确定的时候

class Solution {
     
public:
    int minArray(vector<int>& numbers) {
     
        int l= numbers.size();
        int left = 0;
        int right = l - 1;
        while(left<right){
     
            int mid = (left+right)/2;
            if(numbers[mid]>numbers[right]) left = mid+1;
            else if(numbers[mid]==numbers[right]) right = right - 1;
            else right = mid;
        }
        return numbers[left];
    }
};

你可能感兴趣的:(剑指offer,2019秋冬)