题目描述
统计一个数字在排序数组中出现的次数
思路:
因为数组是排好序的,可以参考二分查找的思路,先用一次二分查找找到数组中第一个小于等于指定元素的下标l,再用一次二分查找找到数组中第一个大于指定元素的下标r,该数字出现的次数就是r-l
参考代码:
在线测试
AC代码
lass Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
if(data.empty())
return 0;
int left=0;
int right=data.size()-1;
while(left<=right)
{
int mid=left+((right-left)>>1);
if(data[mid]>=k)
right=mid-1;
else
left=mid+1;
}
int l=0;
if(left<data.size())
l=left;
else
return 0;
left=0;
right=data.size()-1;
while(left<=right)
{
int mid=left+((right-left)>>1);
if(data[mid]<=k)
left=mid+1;
else
right=mid-1;
}
int r=0;
if(left<data.size())
r=left;
else
r=data.size();
return r-l;
}
};