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; }