剑指offer53.1 数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数。
例如输入排序数组[1, 2, 3, 3, 3, 3, 4, 5]和数字3,由于3在这个数组中出现了4次,因此输出4。
样例
输入:[1, 2, 3, 3, 3, 3, 4, 5] , 3
输出:4
思路:
用二分查找的方法,先查找k所在的第一个位置,然后再查找K+1所在的位置,二分查找若是没有查找到k和K+1所在的位置的话,会返回比其大的数的位置。
AcWing-67 c++ code:
class Solution {
public:
int binarySearch(vector<int>& nums, int k){
int left = 0;
int right = nums.size();
int mid = -1;
while(right > left){
mid = left + (right - left) / 2;
if(nums[mid] < k){
left = mid + 1;
}else{
right = mid;
}
}
return left;
}
int getNumberOfK(vector<int>& nums , int k) {
if(nums.size() == 0){
return 0;
}
int k_small = binarySearch(nums, k);
int k_big = binarySearch(nums, k + 1);
return k_big - k_small;
}
};