class BinarySearch {
public:
int getPos(vector<int> A, int n, int val) {
// write code here
//algorithm中有二分查找法的lower_bound可以找到第一个大于等于目标值的位置
//upper_bound可以找到第一个大于目标值的位置
// auto it=lower_bound(A.begin(),A.end(),val);
// if(it!=A.end())
// return it-A.begin();
// return -1;
//自己实现二分查找
//定义查找起始指针和末尾指针
int left=0;int right=n-1;//查找范围[left,right]
//每次与范围中间值比较,直到查找范围为空
while(left<=right)
{
//与中间值比较
int mid=left+(right-left)/2;//防溢出写法
if(A[mid]<val)
left=mid+1;
else
right=mid-1;
//可以确保left左边都是小于val的,right右边都是大于等于val的
}
//循环结束后,left或者right+1就是第一个大于等于val的位置
return left;
}
};