题目链接
题目描述
统计一个数字在升序数组中出现的次数。
解题思路
- 利用二分查找,找到任意一个 k
- 由于 k 有多个,并且 当前找到的 k 可能在任意位置 。所以, 在当前 k 的前后进行遍历查找
示例
输入:{1,2,3,3,3,3,4,5} 3输出:4
代码
public int GetNumberOfK(int [] array , int k) {if (array == null || array.length == 0) {return 0;}//二分查找int start = 0, end = array.length - 1;int t = -1;while (start <= end) {int mid = (start + end) / 2;if (array[mid] == k) {t = mid;break;} else if (array[mid] > k) {end = mid - 1;} else {start = mid + 1;}}// 如果查找的数字不在数组中if (t == -1) {return 0;}// 此时通过二分查找已经找到了其实一个// sum用来统计总共的个数,是最后返回的值int sum = 0;//左侧// t 保存的为已经找到数组的索引int a = t;while (a >= 0 && array[a] == k) {sum++;a--;}//右侧a = t + 1;while (a < array.length && array[a] == k) {sum++;a++;}return sum;}
