【牛客】旋转数组的最小数字

题目:

旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com)

思路:

这题我们可以通过一次次遍历来查找最小值

但是,这样效率太低,我们这里使用二分查找来实现这题

代码:

class Solution {
public:
    int minNumberInRotateArray(vector<int> rotateArray) 
    {
        int left = 0;
        int right = rotateArray.size() - 1;
        int mid = (left + right) >> 1;
        while( abs(left - right) > 1)
        {
            if(rotateArray[left] < rotateArray[right])//没有进行rotate,最小的在第一个
            {
                return rotateArray[left];
            }
            if(rotateArray[left] == rotateArray[mid] && rotateArray[mid] == rotateArray[right])
            {
                int result = rotateArray[left];
                for(int i = left+1; i < right ; i++)
                {
                    if(result > rotateArray[i])
                    {
                        result = rotateArray[i];
                    }
                }
                return result;
            }
            else
            {
                if(rotateArray[mid] >= rotateArray[left])
                {
                    left = mid;
                }
                else
                {
                    right = mid;
                }
                mid = (left+right) >> 1;
            }

        }
        return rotateArray[right];
        
    }
};

猜你喜欢

转载自blog.csdn.net/holle_world_ldx/article/details/127961233