public class Solution {
public static int GetNumberOfK(int [] array , int k) {
// right为大于k的第一位
int right = b_search(array, k);
// left为大于k-1的第一位,实际上就是等于k的第一位(若存在等于k),不存在k的话就和right一样了
int left = b_search(array, k-1);
System.out.println(right);
System.out.println(left);
return right - left;
}
private static int b_search(int[] array, int k){
// 这里j一定要设为数组长度, 这样在数组中存在k时,仍然可以返回大于k的第一位
// 要是设置为array.length-1,那么当数组中存在k时,返回的是等于k的最后一位,而不是大于k的第一位
int i = 0, j = array.length;
// 同时终止条件为i == j
while(i < j){
// mid 向下取整
int mid = i + (j - i) / 2;
if(array[mid] <= k){
i = mid + 1;
}else{
j = mid;
}
}
// 返回的是大于k的第一位,若数组中不存在,就是数组的最后一位加一
return i;
}
}