//二分法
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int length = array.length;
//特殊值处理
if(length == 0){
return 0;
}
int min = 0;//二分法,最小值下表
int max = length-1;//二分法,最大值下表
int mid = (min + max)/2;//二分法,中值下表
while(min <= max){//循环结束条件:最小值大于最大值(显然不合理)
if(array[mid] == k){//找出相等的值得索引
break;
}else if(array[mid] > k){//中值比目标值(k)大,搜索范围应该在【min,mid-1】中
max = mid-1;
}else{//中值比目标值(k)小,搜索范围应该在【mid+1,max】中
min = mid+1;
}
mid = (min + max)/2;//求中值
}
//最小值大于最大值(显然不合理),说明没有要查找的值
if(min>max){
return 0;
}
int left = mid;
int right = mid;
//往左边遍历查找第一个不是目标值(k)的下标索引
while(left >= 0 && array[left] == k){
left--;
}
//往左边遍历查找第一个不是目标值(k)的下标索引
while(right <= length-1 && array[right] == k){
right++;
}
return right-left-1;
}
}