题目描述:
统计一个数字在排序数组中出现的次数。
本题知识点:
数组
解题思路:
由于数组为排序数组,所以采用二分查找方式,寻找数字第一次出现和最后一次出现的位置。
代码:
class Solution {
public:
int getLower(vector<int> data,int k){
int start = 0, end = data.size() - 1;
int mid = (start + end) / 2;
while(start <= end){
if(data[mid] < k)
start = mid + 1;
else
end = mid - 1;
mid = (start + end) / 2;
}
return start;
}
int getUpper(vector<int> data, int k){
int start = 0, end = data.size() - 1;
int mid = (start + end) / 2;
while(start <= end)
{
if(data[mid] <= k)
start = mid + 1;
else
end = mid - 1;
mid = (start + end) / 2;
}
return end;
}
int GetNumberOfK(vector<int> data ,int k) {
if(data.size() == 0)
return 0;
int lower = getLower(data,k);
int upper = getUpper(data,k);
return upper - lower + 1;
}
};