public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array.length == 0 || k < array[0] || k > array[array.length-1])
return 0;
int count = 0;
//二分法找到第一个k
int left = 0;
int right = array.length-1;
int mid = -1;
while(left <= right){
mid = (left + right) / 2;
if(array[mid] < k)
left = mid+1;
else if(array[mid] > k)
right = mid-1;
else{
count++;
break;
}
}
//因为是升序数组,所以只需要从mid往左右继续遍历即可
int t1 = mid - 1;
int t2 = mid + 1;
while(t1 >= left){
if(array[t1] == k)
count++;
else
break;
t1--;
}
while(t2 <= right){
if(array[t2] == k)
count++;
else
break;
t2++;
}
return count;
}
}