一种很常用的加快查找速度的方式,二分,解决排好序的数组中的大于x的最小(第一个数)的下标。
代码实现:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n,x;
int data[1000005];
int erfen()
{
int low=0,high=n-1;
int mid;
while(low<=high)
{
mid=(low+high)/2;
if(data[mid]==x)
{
//cout<<"mid= "<<mid<<endl;
return mid;
}
else if(data[mid]>x)
{
//cout<<"low= "<<low<<endl;
high=mid-1;
}
else
{
//cout<<"high= "<<high<<endl;
low=mid+1;
}
}
return high;
}
int main()
{
while(cin>>n>>x)
{
memset(data,0,sizeof(data));
for(int i=0;i<n;i++)
{
cin>>data[i];
}
int ans=erfen();
cout<<ans+1<<endl;
}
return 0;
}