题目描述:
给定一个已知长度的有序数组,利用二分查找找出第一个大于或者等于其值的下标(下标位置从1开始)
核心代码
int Bsearch(int v,vector<int>a,int n)
{ if(v>a[n-1])return n+1;
if(v<a[0])return 1;
int i=0,j=n-1,ans=n+1;
while(i<=j)
{int mid=(j+i)/2;
if(v==a[mid])
{
ans=mid;
break;
}
if(v>a[mid])i=mid+1;
if(v<a[mid])j=mid-1;
}
if(ans==n+1)return i;
else{
int k=ans;
while(k>0&&a[k]==v)--k;
return k+2;
}
}