int GetNumberOfK(int* nums, int numsLen, int k ) {
if(nums[0]>k||nums[numsLen-1]<k)
return 0;//不包含k
if(numsLen==0)
return 0;//数组为空
int min=0,max=0;
int left=0;
int right=numsLen-1;
//判断最后一个数是否为k
//因为需要找k后面的数
if (nums[numsLen-1] == k)
{
max=numsLen;
}
//找k前一个数,这里不用判断是因为min=0
//找不到的话min也为0.不影响结果
while(left<=right)
{
int mid=(left+right)/2;
if(nums[mid]<k)
left=mid+1;
else
right=mid;
if(left==right)
{min=left;
break;}
}
//max不为0代表最后一个数字为k
if (max != 0)
{
return max - min;
}
right=numsLen-1;
//找k后一个数
while(left<=right)
{
int mid=(left+right)/2;
if(nums[mid]<k+1)
left=mid+1;
else
right=mid;
if(left==right)
{max=left;
break;}
}
//判断是否找到
if((max-min)==0)
{
return 0;
}
return max-min;
}