剑指OFFER 10.旋转数组的最小数字


旋转数组的最小数字


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

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

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

数组可能包含重复项。

注意:数组内所含元素非负,若数组大小为 0,请返回 −1。

样例
输入:nums=[2,2,2,0,1]

输出:0
class Solution {
public:
    int findMin(vector<int>& nums) 
    {
        int n=nums.size()-1;
        if(n<0) return -1;
        while(n>0&&nums[0]==nums[n])
        	n--;
        if(nums[n]>=nums[0]) return nums[0];
        int l=0,r=n;
        while(l<r)
        {
        	int mid=r+l>>1;
        	if(nums[mid]<nums[0])
        		r=mid;
        	else l=mid+1;

        }
        return nums[r];
    }
};

class Solution {
public:
    int findMin(vector<int>& nums) 
    {
        int n=nums.size()-1;
        if(n<0)
            return -1;
        while(n>0&&nums[0]==nums[n])
            n--;
        if(nums[n]>=nums[0])
            return nums[0];
        int l=0;
        int r=n;
        while(l<r)
        {
            int mid=l+r>>1;
            if(nums[0]<=nums[mid])
                l=mid+1;
            else r=mid;
        }
        return nums[r];
    }
};

文章作者: LHL
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LHL !
评论
  目录