/**
* 题目:数字在排序数组中出现的次数 如输入{1,2,3,3,3,3,4,5},3出现次数为4.
*
* @author hexiaoli 思路:剑指offer 1)遍历
* 2)利用二分查找法,先拿中间数字和k比较,如果中间数字<k说明在右半部分,如果中间数字>k说明在左半部分
* 如果相等,需要需要向左向右判断相邻的数字是不是k,再扩展
*/
public class Main {
public static int GetNumberOfK(int[] array, int k) {
// 边界
if (array == null || array.length == 0) {
return 0;
}
int first = getFirstK(array, k, 0, array.length - 1);
int last = getLastK(array, k, 0, array.length - 1);
if (first == -1 || last == -1) {
return 0;
}
return (last - first + 1);
}
public static int getFirstK(int[] array, int k, int head, int tail) {
while (head <= tail) {
int mid = (head + tail) >> 1;
if (k > array[mid]) {
head = mid + 1;
} else if (k < array[mid]) {
tail = mid - 1;
} else {// 如果中间位置正好是k,需要判断mid对应位置的左边
剑指offer(37)数字在排序数组中出现的次数
最新推荐文章于 2020-03-26 15:24:14 发布
![](https://img-home.csdnimg.cn/images/20240611030827.png)