旋转数组的最小数字(牛客网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
请按任意键继续. . .
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值