public class Solution {
public int GetNumberOfK(int[] array, int k) {
//二分法
if (array == null || array.length < 1) {
return 0;
}
int start = 0;
int end = array.length - 1;
int mid = 0;
//先用二分法找到k点
while (start <= end) {
mid = start + (end - start) / 2;
if (array[mid] == k) {
break;
} else if (array[mid] < k) {
start = mid + 1;
} else {
end = mid - 1;
}
}
if (array[mid] != k) {
return 0;
}
//从k点向前向后遍历计数
int count = 0;
int cur = mid;
while (cur < array.length && array[cur] == k) {
count++;
cur++;
}
cur = mid - 1;
while (cur >= 0 && array[cur] == k) {
count++;
cur--;
}
return count;
}
}