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

2019-04-06  本文已影响0人  邓泽军_3679

1、题目描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

输入一个升序的数组的一个旋转,输出旋转数组的最小元素。

例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

数组可能包含重复项。

输入:nums=[2,2,2,0,1]
输出:0

2、问题描述:

3、问题关键:

4、C++代码:

class Solution {
public:
    int findMin(vector<int>& nums) {
        int n = nums.size();
        if (n == 0) return -1;
        while(n > 0 && nums[n - 1] == nums[0]) n --;这一步不要忘记了,我错了。。。。
        int l = 0, r = n - 1;
        while(l < r) {
            int mid = l + r >> 1;
            if (nums[mid] < nums[r]) r = mid;//说明右边递增,突变区间在左边。
            else l = mid + 1;
        }
        return nums[l];
    }
};
上一篇 下一篇

猜你喜欢

热点阅读