用两次不同的二分即可确定左右界限,相减即可。
public class Solution {
int minn(int a[],int l,int r,int x){
while(l<r){
int mid=(l+r)/2;
if(a[mid]>=x){
r=mid;
}
else{
l=mid+1;
}
}
return l;
}
int maxn(int a[],int l,int r,int x){
while(l<r){
int mid=(l+r+1)>>1;
if(a[mid]<=x){
l=mid;
}
else{
r=mid-1;
}
}
return l;
}
public int GetNumberOfK(int [] array , int k) {
int l=array.length-1;
if(l<0)
return 0;
int x1=minn(array,0,l,k);
if(array[x1]!=k)
return 0;
int x2=maxn(array,0,l,k);
return x2-x1+1;
}
}