因为是有序的,所以用二分查找更快。找到比k小的第一个数作为左边界,找到比k大的第一个数作为右边界,右-左即k的个数。
按普通找某个数的位置来找,只是把int 改为double, 找k-0.5和k+0.5
int position(int* data, int n, double k){ int left = 0, right = n-1, mid = 0; while(left <= right){ mid = (left + right)/2; if(data[mid] < k) left = mid + 1; else if(data[mid] > k) right = mid - 1; else return mid; } return left; } int GetNumberOfK(int* data, int dataLen, int k ) { return position(data, dataLen, k+0.5) - position(data, dataLen, k-0.5); }