旋转数组的最小数字(牛客网C++代码)

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。


//折半查找–每次折半,时间复杂度logn

#include<iostream>
#include<vector>

using namespace std;

int minNumberInRotateArray(vector<int> Array)
{
    int mysize=Array.size();
    if(Array.size()==0)
        return 0;
    int low=0;
    int high=Array.size()-1;
    int mid=(low+high)/2;
        while(low<high)
        {
            if(Array[mid]==Array[low])
                low=low+1;
            else if(Array[mid]>Array[low])
                low=mid;
            else
                high=mid;
            mid=(low+high)/2;
        }
        return Array[low];
}

int main()
{
    int arr[]={6501,6828,6963,7036,7422,7674,8146,8468,8704,8717,9170,9359,9719,9895,
9896,9913,9962,154,293,334,492,1323,1479,1539,1727,1870,1943,2383,2392,2996,3282,3812,3903,4465,4605,4665,4772,4828,5142,5437,5448,5668,5706,5725,6300,6335};
    int num=sizeof(arr)/sizeof(int);
    vector<int> vec;
    for(int i=0;i<=num-1;i++)
    {
        vec.push_back(arr[i]);
    }
    for(int i=0;i<=num-1;i++)
    {
        cout<<vec[i]<<" ";
    }
    cout<<endl;
    int a=minNumberInRotateArray(vec);
    cout<<"Min="<<a<<endl;

    system("pause");
    return 0;
}

运行结果:

6501 6828 6963 7036 7422 7674 8146 8468 8704 8717 9170 9359 9719 9895 9896 9913 9962 154 293 334 492 1323 1479 1539 1727 1870 1943 2383 2392 2996 3282 3812 3903 4465 4605 4665 4772 4828 5142 5437 5448 5668 5706 5725 6300 6335
Min=154
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/zhenaoxi1077/article/details/80326160