class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if(data.size()==0) return 0;
int l = sear_le(data,k);//左边找<k的位置时,data[l]可能回>=k
int r = sear_r(data,k);//右边找k边界时,data[r]可能<=k;
//如何含有k,则必找到k,前提是有序,否则l>r
if(l>r)return 0;
else return r-l+1;
}
int sear_le(vector<int> data,int k)
{
int le = 0;
int r = data.size()-1;
while(le<=r)
{
int mid =le+r>>1;//统一向下取整
if(data[mid]<k)//<k,若有k,则data[le]的取值必定等于k
// 若没有k,则data[le]的取值必定大于k
{
le = mid+1;
}else{
r = mid-1;
}
}
return le;
}
int sear_r(vector<int> data,int k)
{
int le = 0;
int r = data.size()-1;
while(le<=r)
{
int mid =le+r>>1;
if(data[mid]<=k)
//if <=k 时,else条件为data[r]>k,若有k,即r的结果为data[r]=k
// 若没有k,data[r]<k
{
le = mid+1;
}else{
r = mid-1;
}
}
return r;
}
};