思路:
因为是非降序数组,所以可以通过二分法快速排查范围,等mid值找到对应k时,只需要往前找有多少个k和往后找有多少个k,计算出总数即可
答案:
int GetNumberOfK(int* nums, int numsLen, int k )
{
int count=0;
int left=0,right=numsLen-1;
while(left<=right)
{
int mid=(left+right)/2;
if(nums[mid]>k)
{
right=mid-1;
}
else if(nums[mid]<k)
{
left=mid+1;
}
else
{
int res=nums[mid];
int j=mid;
while(nums[mid--]==res) //计算左边(用后置--包括mid的k)有多少个k
{
count++;
}
while(nums[++j]==res) //计算右边(用前置++忽略mid的k)有多少个k
{
count++;
}
break; //跳出循环
}
}
return count;
}