题目描述
统计一个数字在升序数组中出现的次数。
方法:二分查找
显然方法一没有把数组有序的条件利用上,也很显然是利用二分查找。因为有序,所以目标值target
如果有多个,肯定是连在一起。又已知我们可以在有序数组中查找任意一个值,因此我们可以先查找目标范围的下界和上界。
下界定义为:如果存在目标值,则指向第一个目标值,否则,如果不存在, 则指向大于目标值的第一个值。
上界定义为:不管目标值存在与否,都指向大于目标值的第一个值。
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int res_l=0, res_r=0;
int l=0, r=data.size();
while(l < r){
int mid = l + (r-l) / 2;
if(data[mid] < k)
l = mid+1;
else
r = mid;
}
res_l = l;
l=0, r=data.size();
while(l < r){
int mid = l + (r-l) / 2;
if(data[mid] <= k)
l = mid+1;
else
r = mid;
}
res_r = l;
return res_r - res_l;
}
};