public class Solution {
public int GetNumberOfK(int [] array , int k) {
//1. 空数组特例限定
int len = array.length;
if(len == 0){
return 0;
}
//1. 寻求左边界:即第一个等于k的元素索引
int left = 0;
int right = len - 1;
while(left < right){
//mid向下取整
int mid = (right + left) >> 1;
if(array[mid] < k){
//array[mid]小于k,说明k在右侧,移动左边界至mid后一位
left = mid + 1;
}else{
//等于或者大于k,说明第一个k可能在mid及其左侧,此时左边界不动,移动右边界。
right = mid;
}
}
if(array[right] != k) return 0;
int leftEdge = right;
//2. 寻求右边界:即最后一个等于k的元素索引
right = len - 1;
while(left < right){
//mid向上取整
int mid = (right + left + 1) >> 1;
if(array[mid] <= k){
left = mid;
}else{
right = mid - 1;
}
}
if(array[right] != k) return 0;
int rightEdge = right;
return rightEdge - leftEdge + 1;
}
}