用二分搜索(binary search)来确定在整数A1<A2<A3<...<AN的数组中是否存在整数i使得Ai=i。

//运行时间O(logN)
#include <iostream>
#include <vector>
using namespace std;

//binary search
bool exist(const vector<int>& a)
{
    int low=0,high=a.size()-1;

    while(low<=high)
    {
        int mid=(low+high)/2;
        if(a[mid]<mid+1)
            low=mid+1;
        else if(a[mid]>mid+1)
            high=mid-1;
        else
            return true;
    }
    return false;
}

int main()
{
    vector<int> vi={-5,-3,-1,1,2,3,5,7,8,10};
    if(exist(vi))
        cout << "exist";
    else
        cout << "not exist";
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/lhb666aboluo/p/12642318.html
今日推荐