//每次二分查找都是在当前有效数组下进行的,即下标beg到下标end之间 int BinarySearch(int* data, int dataLen, int k, int beg, int end, int mid) { if (beg > end) { //没找到,直接返回0 return 0; } if (data[mid] == k) { //找到了一个待查找的值k,并继续分别在左半边数组和右半边数组查找,直到下标beg大于end return 1 + BinarySearch(data, dataLen, k, mid + 1, end, mid + 1 + (end - (mid + 1)) / 2) + BinarySearch(data, dataLen, k, beg, mid - 1, beg + (mid - 1 - beg) / 2); } else if (data[mid] > k) { //待查找的值k在当前数组的左半边 return 0 + BinarySearch(data, dataLen, k, beg, mid - 1, beg + (mid - 1 - beg) / 2); } else { //待查找的值在当前数组的右半边 return 0 + BinarySearch(data, dataLen, k, mid + 1, end, mid+1 + (end - (mid + 1)) / 2); } } int GetNumberOfK(int* data, int dataLen, int k) { // write code here int beg = 0; int end = dataLen - 1; int mid = beg + (end - beg) / 2; int cnt = BinarySearch(data, dataLen, k, beg, end, mid); return cnt; }