统计一个数字在升序数组中出现的次数。
方法1:暴力查找统计
class Solution {
public:
int GetNumberOfK(vector<int> data ,int k) {
int res=0;
for(auto val:data)
{
if(val==k)
res++;
}
return res;
}
};
方法2:二分查找
int GetNumberOfK(vector<int> data ,int k)
{
int len=data.size();
int left=0,right=len-1;
int mid=(left+right)/2;
while(mid>=0&&mid<len&&left<=right)//left<=right取等号情况是在只有一个数时
{
if(data[mid]>k)
{
right=mid-1;
mid=(left+right)/2;
}
else if(data[mid]<k)
{
left=mid+1;
mid=(left+right)/2;
}
else
{
left=mid-1;
right=mid+1;
break;
}
}
if(left>right)
{
return 0;//加判断是因为,有可能不存在要查的数
}
while(data[left]==k)
{
left--;
}
while(data[right]==k)
{
right++;
}
return (right-left-1);
}