题目要求
统计有一个数字在排序数组中出现的次数。
核心思想
除了暴力求解以外,可以进行改进,利用二分法来做。
完整代码如下
/**
* 统计有一个数字在排序数组中出现的次数
* @author mac
* 采用二分法
*/
public class Solution {
public int GetNumberCount(int [] array, int k) {
int leftIndex = -1;
int start = 0;
int end = array.length;
while(start <= end) {
int mid = (start + end) / 2;
if(array[mid] > k) {
end = mid - 1;
} else if(array[mid] < k) {
start = mid + 1;
} else {
leftIndex = mid;
end = mid - 1;
}
}
start = 0;
end = array.length - 1;
int rightIndex = -1;
while(start <= end) {
int mid = (start + end) / 2;
if(array[mid] > k) {
end = mid - 1;
} else if(array[mid] < k) {
start = mid + 1;
} else {
rightIndex = mid;
end = mid + 1;
}
}
if(array.length == 0 || rightIndex == -1) {
return 0;
}
return rightIndex - leftIndex + 1;
}
}