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; } }