旋转数组

题目

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。

class Solution {
public:
    int minNumberInRotateArray(vector<int> arr) {
        if(arr.size()==0)
            return 0;
        
        int left=0,right=arr.size()-1,mid=0;
        while(arr[left]>=arr[right])
        {
            mid=left+(right-left)/2;
            if(right-left==1)
            {
                mid=right;
                break;
            }
            if(arr[left]==arr[right]&&arr[left]==arr[mid])
                return getMinInOrder(arr,left,right);
            if(arr[left]<=arr[mid])
                left=mid;
            else
                right=mid;
        }
        return arr[mid];
    }
private:
    int getMinInOrder(vector<int> arr,int left,int right)
    {
        int m=arr[left];
        for(int i=left+1;i<=right;++i)
            if(m>arr[i])
                m=arr[i];
        return m;
    }
};
原文地址:https://www.cnblogs.com/tianzeng/p/10134274.html