题目描述
统计一个数字在升序数组中出现的次数。
public class Solution {
public int GetNumberOfK(int [] array , int k) {
if(array == null || array.length == 0) {
return 0;
}
return binarySearch(array, 0, array.length - 1, k);
}
public int binarySearch(int[] arr, int left, int right, int k) {
int count = 0;
int mid = (left + right) / 2;
if(left > right) {
return count;
}
if(k < arr[mid]) {
//向左递归
return binarySearch(arr, left, mid - 1, k);
}if(k > arr[mid]) {
//向右递归
return binarySearch(arr, mid + 1, right, k);
}else {
//说明找到了,先不要急着返回
//向左找找
int a = mid - 1;
while(left <= a && arr[a] == k) {
count++;
a--;
}
//把mid处的也要++
count++;
//向右找找
int b = mid + 1;
while(b <= right && arr[b] == k) {
count++;
b++;
}
}
return count;
}
}